如何在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++ 中的读/写字符串