根据第一个字符对文本行排序-C编程
您好,我想用C语言制作一个排序软件。它根据行的第一个字符对文本行进行排序。我想把以V开头的行和以V开头的行分组。这样,以V开头的字母的行将被排序在一起。有人能告诉我怎么做吗根据第一个字符对文本行排序-C编程,c,string,sorting,character,line,C,String,Sorting,Character,Line,您好,我想用C语言制作一个排序软件。它根据行的第一个字符对文本行进行排序。我想把以V开头的行和以V开头的行分组。这样,以V开头的字母的行将被排序在一起。有人能告诉我怎么做吗 f -0.80811 -0.520398 -0.275942 v 0.0146114 -0.0939821 0.00366211 v 0.0133369 -0.0926109 0.00480863 v 0.0142794 -0.0932492 0.00325213 f -0.788618 -0.530816 -0.3
f -0.80811 -0.520398 -0.275942
v 0.0146114 -0.0939821 0.00366211
v 0.0133369 -0.0926109 0.00480863
v 0.0142794 -0.0932492 0.00325213
f -0.788618 -0.530816 -0.310349
v 0.0146114 -0.0939821 0.00366211
v 0.0142794 -0.0932492 0.00325213
v 0.0144766 -0.0933648 0.00294873
f -0.726784 -0.686213 0.0299526
v 0.0154684 -0.0952972 0.00472045
v 0.0158173 -0.0956479 0.00515121
v 0.0150361 -0.0947439 0.00690701
我没有过多考虑复杂性的一个快速方法是: 创建一个结构 结构车对{ int lineNr; char firstChar; }; 读取每行的第一个字符,并创建行号和第一个字符的数组 编写比较函数并使用qsort根据字母对数组进行排序。 对于数组中的每个字母,将元素复制到上的子数组中,因为它已排序。 编写另一个比较函数,根据行号对每个子数组进行排序 阅读已排序的行。。。
这类问题应该通过减少偏好来解决 使用特定工具,在这种情况下进行排序 使用脚本语言(如Perl或Python)编程 用低级编程语言(如C)编程
你应该选择方法一,除非特定的工具不可用,或者这个问题只是更大项目的一小部分。在前一种情况下,你应该尝试第二种方法;在后者中,您应该选择较大项目中使用的编程语言。此概念验证满足您的需要。 但这样做会容易得多 $sort file.txt 免责声明:这是我第一次发布堆栈溢出,所以如果我做错了什么,请告诉我: 此操作的内存开销为8MiBsizeofchar**1024*1024。它还将文件的全部内容存储在内存中。消耗大约60兆内存
#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
#define LINES_IN_FILE 32
int compare(const void *ap, const void *bp)
{
char **a = (char **)ap;
char **b = (char **)bp;
return strcmp(*a, *b);
}
int main(void)
{
FILE *in = fopen("text.txt", "r");
if (!in)
return 1;
char **pbuf, **buf;
pbuf = buf = malloc(sizeof (char *) * LINES_IN_FILE);
size_t count = 0, len = 0;
while (getline(pbuf, &len, in) != -1) {
pbuf++;
count++;
len = 0;
}
qsort(buf, count, sizeof(char *), compare);
/* cleanup and print or whatever */
return 0;
}
您可以通过将strcmp函数替换为只比较第一个字节的测试来加快速度,即如果*a[0]>*b[0]…文件很大吗???或者,您可以将所有文件读入内存中的一个行数组并对其进行qsort吗?您不能使用shell/Python脚本吗?如果必须是C,请使用stdlib的qsort。。大约500k~700k行..问题不在于行数,而在于总字节数。让我们总结一下:1000k行,每行50个字符。。。那是5000万的记忆。我建议您将整个文件读入RAM并进行qsort