根据第一个字符对文本行排序-C编程

根据第一个字符对文本行排序-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

您好,我想用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.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