我正在尝试用字符串“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/