在C中按“a A b B c C”的顺序对字符串数组进行排序

Posted

技术标签:

【中文标题】在C中按“a A b B c C”的顺序对字符串数组进行排序【英文标题】:sort string array in order "a A b B c C" in C 【发布时间】:2013-03-30 16:19:03 【问题描述】:

这是一个叫做 sort_list_forward 的小函数

struct customer * sort_list_forward (struct customer * liste_)

    struct customer *pointer1, *pointer2;
    struct customer tmp;

    if (liste_!=NULL)
    
        pointer1 = liste_;
        while(pointer1 != NULL)
        
            pointer2 = pointer1->next;
            while(pointer2 != NULL)
            

                if (strcmp(pointer1->name,pointer2->name) > 0)
                
                    strcpy(tmp.name, pointer2->name);
                    strcpy(pointer2->name, pointer1->name);
                    strcpy(pointer1->name, tmp.name);
                
                pointer2 = pointer2->next;
            
            pointer1 = pointer1->next;
        
        return liste_;
    
    else
    
        printf("sortnames: no elements avaiable");
        return NULL;
    

结构体 customer 的样子

typedef struct customer 
    char name[256];
    struct customer *next;
    struct customer *previous;
;

如果我使用这个函数,输出看起来像

Ann
Bernd
Hans
barbara
bart
berta
homer

但我想要一个看起来像

的输出
Ann
barbara
bart
berta
Bernd
homer
Hans

a A b B c C d D ...

我搜索了8个多小时,但一无所获:(

【问题讨论】:

如果您使用std::stringstd::sort,这会容易得多。 这是 C 还是 C++?我怀疑是 C。 您可以根据比较标准轻松实现自己的strcmp 版本。使用标准strcmp作为参考,它是免费的 【参考方案1】:

通过调用strcoll,使用排序顺序比较您的字符串,而不是strcmp

【讨论】:

【参考方案2】:

使用strcasecmp作为排序顺序是忽略单词的大小写。

【讨论】:

strcasecmp 不是 C 或 C++ 标准的一部分。这是 POSIX。 如果我使用 strcasecmp,输出看起来像,Ann barbara bart Bernd berta Hans homer

以上是关于在C中按“a A b B c C”的顺序对字符串数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

用c语言求解 输出1-50以内的所有勾股数

Rust的宏可以像C预处理器宏一样扩展为十六进制数吗?

如何在laravel中无任何顺序地调用带有命名参数的sp

dplyr inner_join 与字符列上的 NA

Codeforces Round #615 (Div. 3)

java中变量a是double型的。怎么判断a是不是为null