Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过查看行中的一个属性对c中的文件行进行排序?_C_File_Sorting - Fatal编程技术网

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

如何通过查看行中的一个属性对c中的文件行进行排序?,c,file,sorting,C,File,Sorting,在我的示例中,一行包含8个属性(作为字符串和整数),它们之间用逗号(,)分隔。我根据逗号分割这些属性,条件是:打印文件中与用户输入的输入具有相同国家名称(其中一个属性)的行。因此,我使用strcasecmp编写了这篇文章(不敏感地比较两个字符串大小写): 但是由于城市名称是另一个属性,因此我想将这些行按字母升序放入输出文件中。我经常在互联网上看到类似的例子: for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) {

在我的示例中,一行包含8个属性(作为字符串和整数),它们之间用逗号(
)分隔。我根据逗号分割这些属性,条件是:打印文件中与用户输入的输入具有相同国家名称(其中一个属性)的行。因此,我使用
strcasecmp
编写了这篇文章(不敏感地比较两个字符串大小写):

但是由于城市名称是另一个属性,因此我想将这些行按字母升序放入输出文件中。我经常在互联网上看到类似的例子:

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);
        }
    }
}
(i=0;i{ 对于(j=i+1;j0){ strcpy(临时,名称[i]); strcpy(名称[i],名称[j]); strcpy(名称[j],温度); } } }
但我不能使它们适应我的代码,因为我是一个新的学习者。你能告诉我怎么适应吗?或者,如果你对根据我告诉你的条件进行分类有不同的建议,我很乐意听听。非常感谢。

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

函数定义可在此处在线查看(带示例)——

对于您的代码,排序选项如下所示

qsort(name, n, strcmp)

然后,您可以使用任何方式将它们写入文件。

您的程序必须首先要求用户输入国家名称,并使用
fgets()
scanf()
将该字符串读入一个数组,使用正确的转换格式,具体取决于名称中是否有空格。如果使用
fgets()
,请确保去掉尾随的换行符

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

您可以使用
strchr()
查找字段及其长度

将字段值与用户输入进行比较,忽略大小写。不要为此使用
strcasestr()
,因为它是非标准的,需要使用null来终止字段。 相反,使用循环并使用
tolower()
比较字符以忽略大小写

如果字段匹配,则首先打印该行


一旦程序运行正常,您可以通过将行的副本存储在字符串数组中并使用
qsort()
对其进行排序,然后从数组中打印字符串来实现排序。

您可能也应该以独立于大小写的方式对字符串进行排序。请发布完整的程序并说明问题所在。代码片段不足以获得有用的建议。@chqrlieforyellowblockquotes在此之前我可以问其他问题吗?例如,如果用户输入如下命令,如何打印所有行?由于我使用代码块,我需要输入像“”这样的命令,但是我无法得到我想要的结果。你对此有什么建议吗?非常感谢!我能再问一个问题吗?例如,如果用户输入星号(*)作为命令,我想打印文件中的所有行。因为我使用代码块,所以我需要在引号(“*”)中输入命令,但是我无法得到我想要的结果。你对此有什么建议吗?我个人对代码块知之甚少。这可能是它自己的问题:)
qsort(name, n, strcmp)