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

标签 c string sorting character line

你好,我想用 C 语言制作一个排序软件。它根据文本行的第一个字符对文本行进行排序。我想将 V 和 Vs 开头的行分组。因此以 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

最佳答案

这个概念验证可以满足您的需要。 但这会容易得多
$排序文件.txt

免责声明:这是我第一篇关于堆栈溢出的文章,所以如果我做错了什么,请告诉我。 :)

其内存开销为 8MiB(sizeof(char *) * 1024*1024)。它还将文件的完整内容存储在内存中。消耗大约 ~60Mib 的 RAM。

#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() 函数替换为仅比较第一个字节的测试来加快速度,即 if(*a[0] > *b[0]) ...

关于c - 根据第一个字符对文本行进行排序 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559857/

相关文章:

c# - 使用 LINQ 获取第一个排序元素? (C#)

php - laravel 无法根据价格对记录进行排序

java - 按字母顺序对对象进行排序

c : Reading character in scanf statement returns garbage value

c - ARM V7M 64位划分

c++ - 空for循环仅用于计数

c - 在 C 中的字符串数组中搜索字符串的有效方法。(不区分大小写)

C - 我的字符串在声明一段时间后被修改

c - 用于格式化字符串的 alloca 与固定缓冲区

c++ - Xerces-c 和跨平台字符串文字