gpt4 book ai didi

c - 输入字符串并以随机顺序打印它们

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:18 25 4
gpt4 key购买 nike

我在以随机顺序打印出我的文字时遇到了一些麻烦。我插入的 8 个单词需要以随机顺序打印出来。现在我只能以随机顺序生成其中的一些,因为如果生成两次相同的数字,它会覆盖以前的空间。我怎样才能消除这个问题?

    #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
#define MAX 50

int readLine(char string[]);

int main(void)
{
int i;
char str[8][MAX], temp[8][MAX];
srand((unsigned)time(NULL));
int r_num;

printf("Enter 8 words:\n");

for(i=0; i<8; ++i)
{
readLine(str[i]);
}


for (int i = 0; i < 8; i++)
{
r_num = rand()%8+1;
strcpy(temp[r_num], str[i]);
}

printf("\nRandom order of words: \n");
for(i=0; i<8; ++i)
{
printf("%s\n", temp[i]);
}
printf("\n");

return 0;
}

int readLine(char string[])
{
int ch;
int i=0;
while (isspace(ch = getchar()))
;
while (ch != '\n' && ch != EOF)
{
if (i < MAX)
{
string[i++] = ch;
ch = getchar();
}
}
string[i] = '\0';
return i;
}

最佳答案

打乱数据的一种方法是从尚未选择的内容中挑选。

int main(void)
{
int i;
char str[8][MAX];
int order[8]; /* order list */
srand((unsigned)time(NULL));
int r_num;

printf("Enter 8 words:\n");

for(i=0; i<8; ++i)
{
readLine(str[i]);
}

/* initialize order list */
for (i = 0; i < 8; i++)
{
order[i] = i;
}
for (i = 7; i > 0; i--) /* select from back to front */
{
int pos = rand() % (i + 1); /* pick one position randomly */
/* pick selected element by swapping */
int temp = order[pos];
order[pos] = order[i];
order[i] = temp;
}

printf("\nRandom order of words: \n");
for(i=0; i<8; ++i)
{
printf("%s\n", str[order[i]]); /* print strings in the shuffled order */
}
printf("\n");

return 0;
}

关于c - 输入字符串并以随机顺序打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com