wörter sortieren



  • hiho,
    hab ein problem und zwar hab ich ein strct von array

    struct 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


Anmelden zum Antworten