Lexikographisch sortieren



  • Hallo,

    ich muss zwar ein C++-Programm schreiben, aber unser Prof kann es einfach nicht lassen, immer nur C-Bibliotheken zu benutzen. Deshalb poste ich mein Problem hier rein. Ich muss 20 Strings einlesen und die dann lexikographisch sortiert wieder ausgeben. Ich bekomme in Zeile 27 u. 28 eine Fehlermeldung:

    zeicheneinlesen.cpp:27: Fehler: Ungültiger Feldzuweisung
    zeicheneinlesen.cpp:28: Fehler: unverträgliche Typen in Zuweisung von »const char*« an »char [10]«
    

    Aber da ich mit Pointern noch nicht so gut umgehen kann, verstehe ich auch die Meldung nicht. Hier mein Code:

    #include <cstdio>
    #include <cstring>
    
    int main(){
    	char eingabe[20][10];
    	const int n = 10;
    
    	for(int i = 0; i < n; i++){
    		printf("Bitte geben Sie das %i.te Wort ein: ",i+1);
    		scanf("%s",eingabe[i]);
    	}
    
    	printf("\nSie haben folgende Wörter eingegeben: \n");
    	printf("[");
    	for(int i = 0; i < n; i++){
    		printf("%s",eingabe[i]);
    		if(i != n-1)printf(", ");
    		else printf("]\n");
    	}
    
    	//lexikalische Sortierung
    	char *tmp;
    	do{
    		for(int i = 0; i < n-1; i++){
    			if(strcmp(eingabe[i], eingabe[i+1]) > 0){
    				tmp = eingabe[i+1];
    				eingabe[i+1] = eingabe[i];
    				eingabe[i+1] = tmp;
    			}
    		}
    	} while(tmp);	//d.h. while(tmp != 0)
    
    	//lexikographisch sortierte Ausgabe
    	for(int j = 0; j < n; j++) printf("%s\n",eingabe[j]);
    
    	return 0;
    }
    

    Was ist mein Fehler?



  • #include <cstdio>
    #include <cstring>
    
    int main(){
        char eingabe[20][10];
        const int n = 10;
    
        for(int i = 0; i < n; i++){
            printf("Bitte geben Sie das %i.te Wort ein: ",i+1);
            scanf("%s",&eingabe[i][0]);
        }
    
        printf("\nSie haben folgende Wörter eingegeben: \n");
        printf("[");
        for(int i = 0; i < n; i++){
            printf("%s",&eingabe[i][0]);
            if(i != n-1)printf(", ");
            else printf("]\n");
        }
    
        //lexikalische Sortierung
        char tmp;
        int x = n;
        do{
            for(int i = 0; i < n-1; i++){
                if(strcmp(&eingabe[i][0], &eingabe[i+1][0]) > 0){
                    tmp = eingabe[i+1][0];
                    eingabe[i+1][0] = eingabe[i][0];
                    eingabe[i][0] = tmp;
                }
            }
        } while(x--);    //d.h. while(tmp != 0)
    
        //lexikographisch sortierte Ausgabe
        for(int j = 0; j < n; j++) printf("%s\n",&eingabe[j][0]);
    
        return 0;
    }
    

    😉



  • Danke, es läuft. Aber nun habe ich ein anderes Problem. DIese Variante für die lexikographische Sortierung habe ich aus einem Buch. Aber es wird bei mir nichts sortiert. Hab z.B. n auf 5 (also 5 Strings eingeben) gesetzt und folgendes herausbekommen:

    Bitte geben Sie das 1.te Wort ein: Hallo
    Bitte geben Sie das 2.te Wort ein: Welt
    Bitte geben Sie das 3.te Wort ein: mir
    Bitte geben Sie das 4.te Wort ein: ist
    Bitte geben Sie das 5.te Wort ein: schlecht
    
    Sie haben folgende Wörter eingegeben: 
    [Hallo, Welt, mir, ist, schlecht]
    Hallo
    Welt
    mir
    ist
    schlecht
    

    Es wird nichts stortiert...warum?


Anmelden zum Antworten