From 5a3b146df3b3d3720dc9aa2dd85429a4728eea1b Mon Sep 17 00:00:00 2001 From: paulusja Date: Thu, 13 Nov 2025 13:28:38 +0100 Subject: [PATCH] Add solution for string sorting. --- 06_erweiterte_zeiger/stringsortierung.c | 49 +++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/06_erweiterte_zeiger/stringsortierung.c b/06_erweiterte_zeiger/stringsortierung.c index ac9d96e..c38934b 100644 --- a/06_erweiterte_zeiger/stringsortierung.c +++ b/06_erweiterte_zeiger/stringsortierung.c @@ -12,27 +12,70 @@ #include #include -void gibStringsAus(const char *strings[], unsigned int anzahl); + +#define STRING_GROESSE 10 + + +//void gibStringsAus(const char *strings[], unsigned int anzahl); +void gibStringsAus(const char strings[][STRING_GROESSE], unsigned int anzahl); +int compare(const void *arg1, const void *arg2); int main() { - const char *strings[] = {"789", "Zorro", "Adam", "Werner", "123", "Bernd", "Hubert", "456"}; + //const char *strings[] = {"789", "Zorro", "Adam", "Werner", "123", "Bernd", "Hubert", "456"}; + char strings[][STRING_GROESSE] = {"789", "Zorro", "Adam", "Werner", "123", "Bernd", "Hubert", "456"}; unsigned int anzahlStrings = sizeof(strings)/sizeof(strings[0]); printf("Vor Sortierung:\n"); gibStringsAus(strings, anzahlStrings); + qsort(strings, anzahlStrings, sizeof(strings[0]), compare); + printf("\nNach Sortierung:\n"); gibStringsAus(strings, anzahlStrings); return EXIT_SUCCESS; } -void gibStringsAus(const char *strings[], unsigned int anzahl) +/*void gibStringsAus(const char *strings[], unsigned int anzahl) +{ + for(int i = 0; i < anzahl; i++) + { + printf("%s\n", strings[i]); + } +}*/ + +void gibStringsAus(const char strings[][STRING_GROESSE], unsigned int anzahl) { for(int i = 0; i < anzahl; i++) { printf("%s\n", strings[i]); } } + +int compare(const void *arg1, const void *arg2) +{ + //const char *string1 = *(const char **)arg1; + //const char *string2 = *(const char **)arg2; + const char (*zgr1)[STRING_GROESSE] = (char (*)[STRING_GROESSE])arg1; + const char (*zgr2)[STRING_GROESSE] = (char (*)[STRING_GROESSE])arg2; + const char *string1 = *zgr1; + const char *string2 = *zgr2; + + if(!isdigit(string1[0]) && !isdigit(string2[0])) + { + return strcmp(string1, string2); + } + else if(isdigit(string1[0]) && isdigit(string2[0])) + { + return -strcmp(string1, string2); + } + else + { + if(isdigit(string1[0])) + return 1; + else + return -1; + } +}