C 将单词中的字符随机化

C 将单词中的字符随机化,c,sorting,random,C,Sorting,Random,我试图找出如何将字符串中的字符随机排序,例如“this”、“htis”、“tish”或“hsit”。我相信我的问题在于rand()可能会在循环中两次选取相同的随机数。例如,第二个字符在循环过程中应用了两次。我也非常确定,在循环的最后一次迭代中,这个循环在某个点上没有任何东西可供选择 我的代码如下: int main(void){ setvbuf(stdout,NULL,_IONBF,0); int size=0; char word[size]; int i; printf("Please

我试图找出如何将字符串中的字符随机排序,例如“this”、“htis”、“tish”或“hsit”。我相信我的问题在于rand()可能会在循环中两次选取相同的随机数。例如,第二个字符在循环过程中应用了两次。我也非常确定,在循环的最后一次迭代中,这个循环在某个点上没有任何东西可供选择

我的代码如下:

 int main(void){
setvbuf(stdout,NULL,_IONBF,0);
int size=0;
char word[size];
int i;

printf("Please enter a word: ");
scanf(" %s",&word);
printf("Scanning the size of the word...");
size = strlen(word);
    for(i=0;i<size;i++){
    srand(time(0));
    int j = i + rand() / (RAND_MAX / (size - i) + 1);
    char t = word[j];
    word[j] = word[i];
    word[i] = t;
    }
printf("%i",size);
    for(i=1;i<size+1;i++){
        printf(" %c",word[i]);
    }
return 0;
}
int main(无效){
setvbuf(标准输出,空,0);
int size=0;
字符字[大小];
int i;
printf(“请输入一个单词:”);
scanf(“%s”、&word);
printf(“扫描单词的大小…”);
大小=strlen(字);

对于(i=0;i实现的问题是在循环中调用
srand
。由于循环进行得非常快,因此在调用
srand
时使用相同的种子值,因为
time(0)
在循环迭代之间没有机会勾选

将调用移动到循环外部的
srand
,以解决此问题

注意:有关Fisher-Yates shuffle的良好C实现,请参阅。

try