Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Moin,

es ist mir echt unangenehm so viele Threads für ein Programm zu öffnen, aber ich weiß echt nicht mehr weiter...

Ich möchte ein zweidimensionales char Array durch selbstgeschriebene Quicksort und Bubblesort-Funktionen sortieren lassen, leider funktioniert das ganze nicht wie geplant.

Mein Code:

int laenge;


void swap2(char *array1, char *array2) //tauscht String1 und String2

{

    char tmp[100];

    strcpy(tmp,array1);

    strcpy(array1,array2);

    strcpy(array2,tmp);

    free(tmp);

    return;

}


void LexBubblesort(char *array[]) //Bubblesort-Funktion für alphabetische Arrrays

{

    int j;

    int i;

    for (i=0; i < laenge - 1; i++) {

        for (j=0; j<laenge - 1; j++) {

            if (strcmp(array[j], array[j+1]) > 0) {

                swap2(array[j],array[j+1]);

            }

        }

    }

}


scmp( void *sp1, void *sp2 ) //comparator-Argument für die Quicksort-Funktion (alphabetisch)

{

    return( strcmp(*(char **)sp1, *(char **)sp2) );

}


int i;

int j;

char Woerter[100][20];   //das zu sortierende Array


int main (void)

{


    laenge=0;

    do

    {

        error = fscanf(data1,"%s",Woerter[laenge]); //Daten werden dynamisch eingelesen

        laenge++; //um die Anzahl der Datensätze zu zählen, in meinem Fall =10

    }

    while (error != EOF); //Bis die Datei am Ende ist

    laenge--; //Da der Durchlauf in dem festgestellt wird, dass die Datei zuende ist, ebenfalls mitgezählt wird
Soweit wird das Array beschrieben und die Funktionen für Bubblesort und Quicksort sind erstellt, nun möchte ich das Array in die Funktionen einsetzen (die Compilerfehler treten alle hier auf):
qsort(Woerter,laenge,sizeof(char),scmp);
oder
LexBubblesort(Woerter);

Beim Bubblesort bekomme ich eine Compilerwarnung wegen inkompatiblen Zeigertypen und beim Quicksort bekomme ich eine Compilerwarnung in Argument 4.

Nun habe ich schon einige Zeit daran rumgedoktort und komme einfach nicht darauf wo mein Fehler ist.

Kann mir dabei jemand helfen und mir sagen was ihr von meinem Code haltet? Ich bin dankbar für jeden Tipp.

Gruß und vielen lieben Dank!

Metalmind

Geschrieben

Da sind mehrere Fehler drin.

  • free darfst du nur auf Zeiger anwenden, die du mit malloc reserviert hast.
  • Der Parametertyp von LexBubblesort passt nicht. char *array[] deklariert ein Array von Zeigern. Du brauchst einen Zeiger auf ein Array, und du musst die Länge des Arrays angeben: char(*array)[20].
  • Die Parametertypen deiner Quicksort-Vergleichsfunktion müssen const void sein.
  • Du willst doch char-Arrays der Länge 20 sortieren. Also musst du bei qsort auch diese Größe angeben, nicht sizeof(char).
  • strcmp allein liefert dir keine alphabetische Sortierung, weil damit Großbuchstaben grundsätzlich vor Kleinbuchstaben einsortiert werden.

Geschrieben

Danke! Ich habe deine Tipps eingefügt und der Bubblesort arbeitet jetzt einwandfrei!

Der Quicksort macht noch einige Probleme, wenn ich das Array sortieren will stürzt das Programm ab. Ist Quicksort überhaupt für zweidimensionale Arrays geeignet?

Das mit strcmp dürfte kein Problem sein, da alle Wörter groß geschrieben werden.

Gruß und Danke für die schnelle Hilfe!

Metalmind

Geschrieben
Der Quicksort macht noch einige Probleme, wenn ich das Array sortieren will stürzt das Programm ab. Ist Quicksort überhaupt für zweidimensionale Arrays geeignet?
Der Cast auf (char**) ist falsch, wenn du zweidimensionale char-Arrays sortierst. Da kommen dann die Adressen der Unter-Arrays rein, und die entsprechen der Adresse des ersten Zeichen.

Mach mal ein paar Sternchen weg:

return strcmp((char*)sp1, (char*)sp2);

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...