Sortierungsfrage
-
Hi,Habe ein Programm geschrieben was einen Text einließt und die Buchstaben zählt, die Anzahl ausgibt etc.Ich müsste das noch sortieren. Ich hab keinen Plan wie. Kann wer helfen evtl mit Code und Erklärung?Habe die Buchstaben in einen Vektor mit char eingelesen.
Ausgabe imho (Buchstabe,Anzahl abs.Buchstabenhäufigkeit,Rel. Häufigkeit)
z.B.a 37 11%
b 34 15%
c 23
.
.
z 11 8%Müsste das nach Häufigkeit sortieren.Vielen Dank.
-
Zum Sortieren gibt es die ANSI C Standardbibliotheksfunktion qsort, welcher der Vektor mit Anzahl und Größe seiner Elemente sowie eine Sortierfunktion übergeben wird.
-
Was musst du denn dort sortieren? Rein aus Interesse die Ausgabe? Das kann man auch ohne Sortieren machen.
Edit: Achso ich muss lesen lernen! Häufigkeit -.-
#include <stdio.h> #include <stdlib.h> #define ALPHABET 26 struct Buchstabe{ char zeichen; int anzahl; double prozentual; }; void PrintBuchstabe(const struct Buchstabe * const buchstabe){ printf("Zeichen: %c\nAnzahl: %d\nProzentual: %f\n\n", buchstabe->zeichen, buchstabe->anzahl, buchstabe->prozentual); } int Vergleich (const void * a, const void * b) { struct Buchstabe *sa = (struct Buchstabe*)a; struct Buchstabe *sb = (struct Buchstabe*)b; return (sb->anzahl - sa->anzahl); } int main(){ struct Buchstabe alphabet[ALPHABET] = {0}; int i, gesamt = 0; char buffer[256], *iter; printf("Geben Sie bis zu 255 Buchstaben ein (a-z): "); if(0 == scanf("%255[a-z]s", &buffer)) return 1; iter = buffer; while(*iter != '\0'){ ++gesamt; ++alphabet[*iter++ - 'a'].anzahl; } for(i = 0; i < ALPHABET; ++i){ alphabet[i].zeichen = 'a' + i; alphabet[i].prozentual = (double)alphabet[i].anzahl * 100 / gesamt; } qsort(alphabet, ALPHABET, sizeof(struct Buchstabe), Vergleich); for(i = 0; i < ALPHABET; ++i) if(alphabet[i].anzahl > 0) PrintBuchstabe(&alphabet[i]); }
-
Vielen Dank!!