Brauche Hilfe bei einem Programm in C zum einlesen einer Textdatei
-
Hi, also ich bräuchte mal ein paar Anregungen für ein Programm was ich in C schreiben muss für die UNI, hab leider nicht soviel erfahrung mit Programmieren und keinen Plan wie ich da rangehen muss. Also die Aufgabenstellung lautet wie folgt:
Schreiben Sie ein Programm,
das eine Textdatei einliest,
dann die verschiedenen Buchstaben zählt,
und anschließend eine Statistik darüber ausgibt,
welche Buchstaben wie oft im Text vorkommt.Konkrete Fragen meinerseits wären:
Wie lese ich eine Textdatei ein? hab nur varianten gefunden wo eine textdatei erstellt wird.
Wie zähle ich die buchstaben in einer Textdatei? überhaupt nichts gefunden
Und das mit der statistik raffe ich auch nicht wie ich da anfangen soll.
-
//Zum öffnen: //File Zeiger definieren FILE *fz; //Datei öffnen (nur zum lesen ("r") ) ansonsten "rw" "w" "a" etc... fz = fopen("dateiname","r"); //Zeichen einlesen aus der Datei: char c; c = fgetc(fz); //Datei Zeichenweise einlesen bis ende while((c=fgetc(fz) )!= EOF) { //mach was mit dem Zeichen (z.b. zählen wie oft es vorkommt...) } //Zählen könnte man so machen: ( in der Schleife beim einlesen ) int a_counter; int b_counter; //... switch (c) { case 'a': a_counter++; break; case 'A': a_counter++; break; //... } // Nicht vergessen am Ende File Zeiger wieder schliessen fclose(fz);Zur Statistik würd ich sagen hast du ja schon wenn du die Buchstaben gezählt hast. Musst ja dann nur noch mit printf() ausgeben.
Ach ja, und wenn du 'a' und 'A' unterscheiden musst, dann musst du natürlich auch jeweils einen eigenen Counter machen! Und wenn du nicht für jedes einen Counter machen willst, dann kannst du auch ein Array nehmen:int[26] counter; //bzw. int[52] counter bei Groß-Kleinschreibung //... case 'a': counter[0]++; break; case 'A': counter[0]++; break; // bzw. counter[26] case 'b': counter[1]++; break; case 'B': counter[1]++; break; // bzw. counter[27] //...
-
sollte eigendlich recht einfach sein:
//datei im binary-modus öffnen, so kann man auch neue zeilen (\n) einlesen... // geht im ascii-modus wahrscheinlich auch.... FILE *f = fopen("text.txt", "rb"); if(!f) { printf("Fuck\n"); return 1; } char c; int statistik[256]; memset(statistik, 0, sizeof(int)*255); while((c = getc(f)) != EOF) statistik[c]++; // wir ignorieren den ersten eintrag. ist eh nur \0... for(int i = 1; i <= 255; i++) if(statistik[i] > 0) printf("char: %c (%i) kommt %i oft vor.\n", c, c, statistik[i]); return 0;
-
Hallo
Manche Leute scheinen zu vergessen das wir hier im C++ Forum sind, und deshalb lieber std::fstream und cin/cout benutzten.
bis bald
akari
-
@akari: Das ist wohl die natürliche Reaktion, wenn jemand explizit im Thread-Titel und Eröffnungsbeitrag auf "C" hinweist

@Majestik: Was brauchst du nun? C oder C++? (wenn ersteres, würde ich dir einen Schubs ins richtige Board verpassen)
-
Werden hier seit neuestem hausaufgaben erledigt?
Programmieren koennen heisst nicht alles zu koennen, sondern rausfinden zu koennen wie man ein problem loest -
also Majestik -
wenn du in C programmieren willst (musst) schau dir FILE an aber wenn du cpp machen willst (musst) zieh dir std::fstream rein
-
Das nützt jetzt glaube ich auch nichts mehr, nach so vielen Lösungswegen...
-
Vielen vielen Dank leute, jetzt bin ich schon mal eine mega stück weiter gekommen, Normalerweise würde ich die Zeit selber investieren um so eine Aufgabe zu erledigen, aber ich musste die 3 Tage später unter Prüfungsaufsicht erklären und vorführen und da fehlte mir die Zeit mich damit zu bechäftigen und richtig zu verstehen. Natürlich erwarte ich hier nicht das man mir Hausaufgaben macht :D, es war nur ein Notfall
thx nochma