【问题标题】:How can i sort records in a text file in C?如何在 C 中对文本文件中的记录进行排序?
【发布时间】:2019-02-04 09:23:14
【问题描述】:

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

所以我有,例如:

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;

}

【问题讨论】:

  • 请参阅Why is while ( !feof (file) ) always wrong? 循环可以改进为while (fgets(one, 255, fpointer) != NULL) { printf("%s", one); }
  • 顺便说一句,最好不要编辑此处发布的代码,否则 cmets 将没有任何意义。
  • 知道了,只改了原来的!
  • 您可以从末尾搜索每个输入字符串,找到数字的开头,然后应用sscanf提取它。
  • 如果您不懂 C 或编程,这实际上是一项相当广泛的任务。您可以从创建以下单独的程序开始。 1. 只需阅读并打印每一行。 2. 读取每一行并将其存储到分配有malloc 的缓冲区中,然后从缓冲区中打印出来。 3. 读取每一行,从中解析数字并打印出来(编写一个函数,获取该行并返回整数)。 4. 有一个指向行的 char 指针数组,并将所有行读取到分配有malloc 的缓冲区中,并将它们放入数组中,然后打印数组中的行。 5. 使用 3 在 4 之上添加排序。

标签: c file sorting


【解决方案1】:

您可以使用插入排序来代替冒泡。 首先,扫描整个文件并将该行的每个字段存储在数组中(您可以使用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);

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

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 2010-10-18
    • 1970-01-01
    • 2017-02-02
    • 2021-11-23
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多