0 Daumen
462 Aufrufe

Hallo, meine Aufgabe ist es einen String zu sortieren: zuerst Zahlen, dann Großbuchstaben, dann Kleinbuchstaben und dann Sonderzeichen. Das ganze muss mit qsort passieren. Mein Code sieht bisher so aus:

int vergleich(const void *a, const void *b);

int main(int argc, char *argv[]) {
    if(!(argc==2)) {
        printf("Anzahl der Parameter unpassend - Programm wird beendet!\n");
        return 0;
    }

    qsort(argv[1], strlen(argv[1]), sizeof(char), vergleich);
    printf("%s\n", argv[1]);

    return 0;
}

int vergleich(const void *a, const void *b) {
    char *x = (char *)a;
    char *y = (char *)b;

    return *x-*y;
}

Leider sind die Sonderzeichen hier am Anfang einsortiert worden. Kann mir jemand sagen, wie ich die Sonderzeichen am Ende einsortieren kann?

Avatar von

1 Antwort

0 Daumen

#include <ctype.h>
int bestimme_zeichentyp(char a) {
if (isdigit(a)) {
return 0; }
else if (isupper(a)) {
return 1; }
else if (islower(a)) {
return 2; }
else {
return 3;
}
}

int vergleiche_zeichentyp(char a, char b) {
return bestimme_zeichentyp(a) - bestimme_zeichentyp(b);
}

int vergleich (void* a, void* b) {
char* x = (char*) a;
char* y = (char*) b;

int zeichentypvergleich = vergleiche_zeichentyp(*x, *y);

if (zeichentypvergleich == 0) {
return *x-*y;
} else {
return zeichentypvergleich;
}
}
Avatar von 5,7 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community