我试图用字符串填充字符串' 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;到控制台。我做错了什么?
答案 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;可以输出