我正在编写将传递给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指针进行比较。有人可以帮助这个老家伙吗?
答案 0 :(得分:6)
裸数组名称的计算结果为第一个数组元素的地址。您需要比较字符串内容,而不是字符串地址。恰好有一个很好的功能 - strcmp
:
compare(Album * l, Album * r) {
return strcmp(l->title, r->title);
}
答案 1 :(得分:1)
首先,您的compare
函数没有指示返回类型。我假设它应该返回int
。
使用l->title
和r->title
运算符比较>
和==
时,真正发生的事情是正在比较指向内存位置的指针,而不是实际字符。变量l->title
实际上是指向l->title
逻辑上表示的(字符)数组的第一个元素的指针。
您正在寻找功能strcmp
(Google for it或在* nix终端中输入man strcmp
)。如果你想从头开始编写它,你需要编写一个函数,一次比较一个字符的字符串。例如l->title[0]
是该字符串的第一个字符,l->title[1]
是第二个字符,等等。