/* * Erweitern Sie das folgende Programm, sodass es die Funktion qsort der Standard-Bibliothek verwendet, * um das enthaltene String-Array sortiert auszugeben. Es sollen zuerst die Strings ohne Zahlen ausgegeben werden * und am Ende die mit Zahlen. Die Strings ohne Zahlen sollen aufsteigend sortiert werden, die mit Zahlen absteigend. * Sie können davon ausgehen, dass die im Array enthaltenen Strings immer nur aus Buchstaben oder nur aus Zahlen bestehen. * Es ist also ausreichend, das erste Zeichen mittels isdigit(...) zu prüfen. * */ #include #include #include #include void gibStringsAus(const char *strings[], unsigned int anzahl); int compare(const void *arg1, const void *arg2); int main() { const char *strings[] = {"789", "Zorro", "Adam", "Werner", "123", "Bernd", "Hubert", "456"}; unsigned int anzahlStrings = sizeof(strings)/sizeof(strings[0]); printf("Vor Sortierung:\n"); gibStringsAus(strings, anzahlStrings); // TODO: Hier sortieren qsort(strings, anzahlStrings, sizeof(*strings), compare); printf("\nNach Sortierung:\n"); gibStringsAus(strings, anzahlStrings); return EXIT_SUCCESS; } void gibStringsAus(const char *strings[], 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 *str1 = *((const char **)arg1); const char *str2 = *((const char **)arg2); if(!isdigit(str1[0]) && !isdigit(str2[0])) return strcmp(str1, str2); else if(isdigit(str1[0]) && isdigit(str2[0])) return strcmp(str2, str1); else if(isdigit(str1[0])) return 1; else return -1; }