在C中按字母顺序比较字符串

时间:2013-12-01 02:03:58

标签: c string sorting alphabetical

我正在编写将传递给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指针进行比较。有人可以帮助这个老家伙吗?

2 个答案:

答案 0 :(得分:6)

裸数组名称的计算结果为第一个数组元素的地址。您需要比较字符串内容,而不是字符串地址。恰好有一个很好的功能 - strcmp

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

答案 1 :(得分:1)

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

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

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