如何在C中的文本文件中对记录进行排序?

时间:2018-08-29 14:29:29

标签: c file sorting

我创建了一个程序,该程序应该从用户那里获取输入并将其写入文本文件中。现在,我正在制作另一个程序,以从文件中读取这些记录并对它们进行排序。

例如,我有:

User three; Test three; 30
User one; Test; 51
User two; Test two; 40

程序应根据其末尾的编号对这些记录进行排序,因此应为:

User one; Test; 51
User two; Test two; 40
User three; Test three; 30

这是我目前的工作,基本上我创建了一个char one变量,该变量将存储fgets给出的数据并进行打印。两个问题:char one具有固定变量(255),因此,如果记录长于255,则会出现错误。

第二个问题是我不知道如何处理文件的每个记录都有一个变量,我可以打印整个文件,但是我不知道如何根据最后一个数字比较数据,任何建议?我很期待为此使用冒泡排序。

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

int main() {

    char one[255];

    FILE * fpointer = fopen("record.txt", "r");

    while (!feof (fpointer) ) {
    fgets(one, 255, fpointer);
    printf("%s", one);
    }

    fclose(fpointer);
    return 0;

}

1 个答案:

答案 0 :(得分:0)

您可以代替插入气泡进行插入排序。 首先,扫描整个文件并将行的每个字段存储在数组中(您可以使用fscanf())。就像,数组user存储值User Three;User Two;User One;,另一个数组存储Test,第三字段类似。 使数组充满文件内容后,您可以轻松地在最后一个字段上实现插入排序,并对所有数组进行相应排序,然后将数组写回到原始文件或另一个文件中。 如果您需要有关插入排序的帮助,可以签出this。 对于string comparison,请使用strcmp()

希望这会有所帮助。

编辑:扫描3个数组中的每一行,请执行以下操作:

fscanf("%s%s%s", &user[i], &test[i], &num[i], fpointer);

在循环和后续文件读取操作中运行此操作,您将获得数组中的所有数据。