wörter sortieren
-
hiho,
hab ein problem und zwar hab ich ein strct von arraystruct Name { char vorname [50]; char nachname[50]; }; struct Name array[10] = {{"Arni","schwarzenegger"}, {"Bernd","Schuster"}, {"Jean","Jack"}, {"Werner","Beinhardt"}, {"Albert","Einstein"}, {"Berti","Vogts"}, {"Hale","Luia"}, {"Frank","Zander"}, {"Thomas","Doll"}, {"Super","Duper"}} ; void readArray(Name a[]){ int count=0; for(int i=0; i < 10; i++) { printf("name: %s %s \n", array[count].vorname, array[count].nachname); count++; } } void quicksort(Name a[], int l, int r){ if(r>l){ int i=l-1, j=r, tmp; for(;;){ while(a[++i]<a[r]); while(a[--j]>a[r]); if(i>=j) break; tmp=a[i]; a[i]=a[j]; a[j]=tmp; } tmp=a[i]; a[i]=a[r]; a[r]=tmp; quicksort(a, l, i-1); quicksort(a, i+1, r); } } int main() { readArray(array); // quicksort(c,0,7); printf("\n"); // readArray(c); return 0; }
meine frage ist wie kan nich jetzt qsort so umschreiben das er zum beispiel die vornamen alpherbethisch ordnet?
bei mekert er ja rum das er die wöter nicht ordnen kann, ansonsten so wie sie jetzt ist kann ich nach einzelnen buchstaben sortieren. also wenn keine namen vorhanden wäre sondern nur sowas wie a,b,c,d usw.
kann mir jemand helfen wie ich das hinbekommen das er den ganzen namen beachtet und sortiert?!
vielen dank
mfg
eld
-
du musst schon eine function schreiben (verwenden (strcmp)), die strings vergleicht. Wenn du nur structs vergleichst, werden nur die adressen verglichen
-
Benutze doch einfach die qsort funktion und schreibe eine sortierfunktion dafür:
Hier ist meine:
int bl01lib_string_vgl(const void *s1, const void *s2) { return (strcmp(*(char **)s1, *(char **)s2)); }
-
benutz deinen oberen code
strcmp:
int strcmp (const char *s1, const char *s2)
rückgabewert:
0 wenn s1 gleich s2
> 0 wenn s1 lexikografisch größer s2
< 0 wenn s1 lexikografisch kleiner s2