Vergleichen von strings alphabetisch in C
Schreibe ich die Funktion zum vergleichen, die Sie erhalten, übergeben werden, qsort, und ich habe Probleme dabei, den string, alphabetisch zu Sortieren.
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);
Ich weiß, das ist wahrscheinlich falsch, aber ich bin mir nicht sicher, wie Sie Sie zu vergleichen, um char-Zeiger in alphabetischer Reihenfolge. Kann mir jemand helfen, diese alte Kerl?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem nackten array-Namen ausgewertet, um die Adresse des ersten array-Elements. Sie müssen vergleichen, um den string-Inhalt, nicht die string-Adressen. Gibt es eine nette Funktion, das zu tun—
strcmp
:Zuerst, Ihre
compare
Funktion keinen Rückgabetyp angegeben. Ich nehme an es soll zurückint
.Wenn Sie vergleichen
l->title
undr->title
mit der>
und==
Betreiber, was wirklich geschieht, ist, dass Zeiger auf Speicherstellen sind, die verglichen werden, nicht die tatsächlichen Zeichen. Die variablel->title
ist wirklich ein Zeiger auf das erste element der (Zeichen -) arrayl->title
logisch darstellt.Du suchst die Funktion
strcmp
(Google für Sie, oder geben Sieman strcmp
*nix-terminal). Wenn Sie möchten, es zu schreiben, von Grund auf, müssen Sie eine Funktion schreiben, vergleicht die strings ein Zeichen zu einem Zeitpunkt. Zum Beispiell->title[0]
ist das erste Zeichen der Zeichenfolgel->title[1]
ist die zweite, usw.