用随机数字替换字符串中的每个数字的函数

Posted

技术标签:

【中文标题】用随机数字替换字符串中的每个数字的函数【英文标题】:Function which replaces every digit inside of a string with a random digit 【发布时间】:2021-05-18 15:43:35 【问题描述】:

首先,我要感谢在上一期中帮助过我的所有人,这对我了解 C 程序如何在后台运行以及哪些循环用于什么方面有很大帮助。现在我遇到了这个任务:编写一个函数,用另一个随机数替换给定字符串(0、1、2、... 9)(ASCII 值:48、49、50、... 57)中的每个数字数字。字符串中的所有其他类型的数据都需要保持原样。该任务还说,在 main() 中,我应该创建一个能够容纳 50 个元素的字符串,并为 50 个 char 类型元素进行动态内存分配——内存处理的全部能力,最后打印出结果函数。

这是我目前写的:

#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

char* switching(char s[])

    int i;
    srand((unsigned)time(NULL));

    for(i=0; i<strlen(s); i++)
    
        if(s[i] > 57 || s[i] < 48)
        
            s[i] = (float)rand()/RAND_MAX * 9;
        
    
    return s;


int main()

    char *string = (char *)malloc(50);
    fgets(string, 80, stdin);

    if(string == NULL)
        return 1;
    

    char *r;

    r = switching(string);
    printf("%s" , r);
    free(r);

    return 0;

当我在 OnlineGDB 中运行它时,这就是我明显的错误(虽然可能有更多但我不确定):

               Input: 1234abcd
               Expected output: 5865abcd
               Actual output: 1234     
                                                                                                                
                                                                                                                
                                                                                

是的,就像上次一样,我们将不胜感激。提前感谢任何试图提供帮助的人。 编辑:在printf(); 中将"%c" 替换为"%s 并添加了fgets(string, 80, stdin);,但它仍然无法完全工作。

【问题讨论】:

好吧,switching() 返回一个char *,但是%c 转换说明符需要一个int(这是在整数提升之后char 发生的情况)。如果要打印字符串,请使用%s 【参考方案1】:
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

void switching(char *s)

    int i=0;
    char tmp;
    srand(time(NULL));
    for(i=0;i<49;i++)
        if(s[i] < 58 && s[i] > 47)
            tmp = (char)((rand()%9) + 48);
            if (s[i] != tmp)
                s[i]=tmp;
            else
                i--;
        
    

void generate(char *s)
    int i;
    srand(time(NULL));
    static const char alphanum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    for(i=0; i<49; i++)
        s[i]=alphanum[rand() % (sizeof(alphanum) - 1)];
    s[i]='\0';



int main()

    char *string = (char *)malloc(50);

    if(string == NULL)
        return 1;
    
    generate(string);
    printf("Source string:%s\n", string);
    switching(string);
    printf("Output string:%s\n" , string);
    free(string);
    return 0;

输出:

Source string:Tp1NJ1dmaC2V8NOld9gzt8pShf3K7UpYHrwaqXNQhPvnmHWNR
Output string:Tp4NJ6dmaC0V2NOld7gzt3pShf7K5UpYHrwaqXNQhPvnmHWNR

【讨论】:

以上是关于用随机数字替换字符串中的每个数字的函数的主要内容,如果未能解决你的问题,请参考以下文章

python pandas用数字替换数据框中的字符串

mysql 正则表达式替换,把指定位置随机数替换成固定数字

需要为“While Loop”中使用的每个 Sed 替换生成新的随机数

1844. 将所有数字用字符替换

将字符串的数字替换为其他数字

Julia:用数组中的字符串替换数字