随机排序的字符串数组

时间:2015-01-05 12:56:25

标签: c arrays string sorting

我有下面的代码,它从文本文件中读取并提供输出字。我该如何改变这些话呢?

#include <stdio.h>
#include <string.h>

int main()
{
    /* Declare and initialise variable */
    char message[10][150], buffer[150];
    int i = 0;
    FILE *file_in;

    file_in = fopen("test.txt", "r");

    /* Stores and prints the data from the string */
    while (fgets(buffer, 150, file_in)) {
        strcpy(message[i], buffer);
        printf("%s", message[i]);
        i++;
    }

    getchar();
    return 0;
}

3 个答案:

答案 0 :(得分:0)

使用

int j;
srand((unsigned)time(&t));

while(i < 10)
{
  j = rand() % 10;
  printf("%s\n",message[j]);
  i++;
}

以上确保单词被洗牌并打印出来但是这样就无法确保输出中没有重复的单词以便处理此检查下面的链接

Shuffle array in C

答案 1 :(得分:0)

您可以使用例如函数rand()从阵列消息的随机位置打印每个单词。

char message[10][150], buffer[150];
int position,i=0;
srand(time(NULL));

while (fgets(buffer, 150, file_in)) {

    strcpy(message[i], buffer);

    i++;
}
for(i=0;i<10;i++){
   position = rand() % 10;
   printf("%s", message[position]);
}

或者您可以将它们存储在数组中的随机位置,并使用简单的for循环从数组中连续打印数据。

答案 2 :(得分:0)

你应该维护2个阵列,在第一个你将存储单词,在第二个你将存储仍然空闲的位置,使用计数器来管理迭代和仍然空闲的数字,在第一个计数器= 9。

在开始时:单词数组是空闲的,空闲位置包含数字[0-计数器]

选择我randon [0-counter]并获取freeArray [i],用它来存储读取的单词:

strcpy(message[freeArray[i]], buffer);

然后将i移到最后并从0到8得到数字 - 直到你的数字用完为止,使用计数器来管理你到目前为止所做的迭代次数,直到你达到0。

while(cntr>=0)
 {
  //get random number to i from [0 .. cntr]
  strcpy(message[freeArray[i]], buffer);
  freeArray[i] = freeArray[cntr--];
 }

并迭代直到cntr为-1 - 即,当cntr> = 0时。这意味着您已经按随机顺序阅读了所有单词。

相关问题