【问题标题】:Comparing strings alphabetically in C在C中按字母顺序比较字符串
【发布时间】:2013-12-16 23:01:01
【问题描述】:

我正在编写将传递给 qsort 的比较函数,但我无法让字符串按字母顺序排序。

typedef struct{
    char title[30];
    //other irrelevant variables
} Album;

compare(Album * l, Album * r){

    if(l->title > r->title){
         return -1;
    }
    if(l->title == r->title){
        return 0;
    }
    else{
        return 1;
    }
}

qsort(albums, num_albums, sizeof(Album), compare);

我知道这可能是错误的,但我不确定如何按字母顺序与 char 指针进行比较。有人可以帮助这个老家伙吗?

【问题讨论】:

    标签: c string sorting alphabetical


    【解决方案1】:

    裸数组名计算为第一个数组元素的地址。您需要比较字符串内容,而不是字符串地址。恰好有一个很好的函数可以做到这一点——strcmp:

    compare(Album * l, Album * r) {
        return strcmp(l->title, r->title);
    }
    

    【讨论】:

    • 如此简单,但有效。谢谢:)
    【解决方案2】:

    首先,您的compare 函数没有指明返回类型。我假设它应该返回int

    当您使用>== 运算符比较l->titler->title 时,实际发生的是比较指向内存位置的指针,而不是实际字符。变量l->title 实际上是指向l->title 逻辑表示的(字符)数组的第一个元素的指针。

    您正在寻找函数 strcmp(Google 或在 *nix 终端中输入 man strcmp)。如果您想从头开始编写它,则需要编写一个函数,一次比较一个字符的字符串。例如,l->title[0] 是该字符串的第一个字符,l->title[1] 是第二个字符,以此类推

    【讨论】:

      【解决方案3】:

      strcmp 执行二进制排序而不是字母排序。例如,“RT”将出现在“Re”之前。注意大小写混合的字符串。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2022-01-02
      • 2013-10-22
      • 2018-05-17
      • 2019-11-04
      • 1970-01-01
      • 2023-03-12
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多