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

标签 c string random char

我正在尝试用字符串“reset\0”中的字符填充字符串,但是是随机的。由于某种原因,它只给了我一个字符:

#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);
}

仅将一个字符(如“t”或“e”)打印到控制台。我做错了什么?

最佳答案

如果您的意思是对字符进行随机排列,而不仅仅是使用源字符串作为字母表,请考虑 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 处的元素与 0 之间随机索引 j 处的元素交换i,包括在内。

关于c - 字符串没有填充随机字符(C)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485814/

相关文章:

ios - 从数组中返回一个没有重复数字的随机元素(Swift 4.2)

c - 为什么 while 循环中的 scanf 可以工作?

c - 用 C 语言创建一个带有变量的二维数组

c - sendto() 缓冲区满时阻塞,如何解决?

c - RPC:段错误(核心已转储)

python - `features[' contains(%s )' % word.lower()] = True` 在 NLTK 中是什么意思?

javascript - 如何为 BIRT 中的空单元格指定默认字符串值?

php - 每8个字符后插入一个字符

Python新手生成随机字符串

c++ - 创建随机迭代器(排列)