字符串没有填充随机字符(C)?

时间:2015-07-17 22:50:03

标签: c string random char

我试图用字符串填充字符串' reset \ 0'但是随机的。由于某种原因,它只给我一个字符bacK:

#define STR_LEN 6
char *inputString()
{
    char *string[STR_LEN + 1] = {0};
    const char *digits = "reset\0";
    int i;

    for (i = 0; i < STR_LEN; i++) 
    {
        string[i] = digits[ rand() % 5 + 0 ];
    }

    printf("STRING: %s\n", string);
}

只打印一个字符,例如&#39; t&#39;或者&#39; e&#39;到控制台。我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果您的意思是对字符进行随机排列,而不仅仅是将源字符串用作字母,请考虑Fisher–Yates shuffle。实现可能是这样的:

char s[] = "reset";
for (size_t i = strlen(s) - 1; i > 0; i--)
{
    size_t j = rand() % (i + 1);
    char t = s[i];
    s[i] = s[j];
    s[j] = t;
}
printf("%s\n", s);

我们的想法是从右到左,并在每一步中将索引i处的元素与j和{{1}之间的随机索引0的元素交换},包容性。

答案 1 :(得分:0)

更正后的代码

#define STR_LEN 5

    char *inputString()
    {
        char string[STR_LEN + 1] = {0};
        const char *digits = "reset";
        int i;

        for (i = 0; i < STR_LEN; i++) 
        {
            string[i] = digits[ rand() % 5 + 0 ];
        }

        printf("STRING: %s\n", string);
    }

但请注意,这并不是你想要的,它会从&#39; reset&#39;中打印5个随机字符。所以&#39; ssere&#39;可以输出