如何在C语言中通过查看行中的一个属性对文件的行进行排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C语言中通过查看行中的一个属性对文件的行进行排序?相关的知识,希望对你有一定的参考价值。

在我的例子中,一行包括8个属性(字符串和整数),这些属性用逗号隔开 (,). 我根据逗号将这些属性分割开来,我有一个条件。打印文件中与用户输入的国家名称(属性之一)相同的行。 所以我用以下方法来写 strcasecmp (比较两个字符串的大小写不敏感).但我想把行按升序放入输出文件,因为城市名称是另一个属性。

if (strcasecmp(enteredCountryName, CountryNameInTheFile) == 0) {
    fputs(line, outpufile);
}

但我想把这些行按升序排列到输出文件中 因为城市名称是另一个属性. 我经常在网上看到类似的例子。

for (i = 0; i < n - 1; i++) {
    for (j = i + 1; j < n; j++) {
        if (strcmp(name[i], name[j]) > 0) {
            strcpy(temp, name[i]);
            strcpy(name[i], name[j]);
            strcpy(name[j], temp);
        }
    }
}

但由于我是个新手,我无法将其应用到我的代码中。你能告诉我如何适应它吗?或者,如果你有不同的建议,根据我说的条件进行排序,我很乐意听到它。非常感谢您。

答案

在c语言中,最简单的排序方法是使用内置的 qsort 功能,并为您需要排序的项目提供一个比较器。

该函数的定义可以在这里在线查看(含示例)-----------------------------------------------。https:/en.cppreference.comwcalgorithmqsort

在你的代码中,排序选项看起来像这样

qsort(name, n, strcmp)

然后你可以使用任何你想要的方式将它们写入你的文件。

另一答案

你的程序必须首先要求用户提供一个国家名称,然后将这个字符串读到一个数组中,并将其与 fgets()scanf()使用正确的转换格式,取决于名称中是否有空格。如果您使用 fgets()確定你把尾部的換行刪除。

然后程序会打开文件,一次读一行。

你可以用以下方法找到字段和它的长度 strchr().

你将字段值与用户输入进行比较,忽略大小写。不要使用 strcasestr() 因为它是非标准的,而且需要你null终止字段。tolower() 以忽略该情况。

如果字段是匹配的,首先打印该行。

一旦你的程序表现正确,你就可以通过在一个字符串数组中存储行的副本来实现排序,然后用 qsort()然后打印数组中的字符串。

以上是关于如何在C语言中通过查看行中的一个属性对文件的行进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在以前读过的行中找到一些单词并在输出中删除它 - C++ 中的读/写字符串

如何在C++中 统计多行文本中的行数、单词数及字符数

如何通过C中的行总和对矩阵进行排序

如何在不同的行中添加 alertView 中的按钮?

Python - 如何将 python36 命令行中的行保存到 .py 文件中?

Python - 如何将python36命令行中的行保存到.py文件中?