Hallo!
Bin Anfänger in der C-Programmierung und bräuchte da ein wenig Hilfe. Habe mir ein Programm geschrieben, mit dem ich zeichenweise aus einer Textdatei einlesen kann. Anschließend prüfe ich, wieviele Wörter da drinnen sind.
Jetzt sollte ich es nur noch zusammenbringe, dass ich mir die mittlere Wortlänge ausrechne bzw. die absolute und relative Häufigkeit jedes Buchstabens ermittle. Klinge ja nicht so schwer, aber ich schaffe es nicht. Problem ist wohl, dass ich mir die Wörter nur durch True or False ermittelt habe.
Wie kann ich von, wenn ich mittels fgetc gelesen habe, mir das ganze in eine String reinholen? Dann wären Prüfabfragen wohl einfacher...
Vielleicht kann mir wer helfen...
Pendragon
C-Probleme
-
-
für die wortlänge brauchst ja nur einen counter mitlaufen lassen, der immer resettet wird, wenn ein nicht-buchstabe kommt (und den alten wert irgendwo zwischenspeichert). für die buchstabenhäufigkeit reicht ein feld, in dems für jeden buchstaben einen eintrag gibt (also 255 Zeichen groß für ASCII), und dann dieser wert um eins erhöht wird, wenn der buchstabe auftritt:
(auf 0 initialisieren nicht vergessen!)
-
was hal geschrieben hat ist natürlich die einfachste methode....
wenn du aber wirklich den inhalt des files speichern willst:Code
Alles anzeigenFILE *fp; // File Pointer int fsize; // Dateigröße char *fbuffer; // File-Buffer fp = fopen("xyz.dat", "rb"); // Öffnen der Datei -> Lesen+Binary if (fp == NULL) // Fehler beim Öffnen ?!! { // -> JA printf("ERROR: Unable to open file xyz.dat!"); return ; } // Ermitteln der Dateigröße -> ist ein SCHEISS-verfahren...aber ich mache // das schon lange so...funzt gut und ich bin zu fault um den befehl // nachzusehen ;) fsize = 0; // Dateigröße=0 while (fgetc(fp) != EOF) // Solange nicht am Dateiende -> fsize++; // "Dateigröße" erhöhen fseek(fp, 0, SEEK_SET); // Wieder zum Datei-Anfang springen fbuffer = (char *)malloc(fsize+1); // Speicher belegen if (fbuffer == NULL) // Speicher bekommen ?!! { // Nein!!! fclose(fp); // Datei wieder schließen!!! printf("ERROR: Low Memory! Unable to Cache xyz.dat."); return ; } fread(fbuffer, fsize, 1, fp); // Datei in den Buffer lesen fbuffer[fsize] = '\0'; // Am Datei-ende mit 0 abschließen fclose(fp); // und Datei schließen // ....... // Am ende muss der Speicher mit free((void *)fbuffer); freigegeben werden!!!!
so funzt das gut...du kannst dann auf jedes zeichen ganz einfach wie in einem arry (feld) zugreifen -> fbuffer[0] = 1. Zeichen, fbuffer[1] = 2.Zeichen, .... das Feld wir mit '\0' beendet
-> am ende speicher freigeben nicht vergessen!!!
-> die methode um die dateigröße zu ermitteln ist "etwas" gammlig, aber sie funktioniert gut und ich war immer zu faul um die funktion zu verwenden...;)mfg marX
-
Ouch
fseek(fp, 0, SEEK_END);
fsize = ftell(fp);
wäre zumindest mit den stdio funktionen ein _wenig_ schneller -
...hab ja gesagt, dass das nicht schön ist, aber faulheit ist das schlimmste übel (langsam ist's normalerweise aber nicht ;))
na ja....gibt ja auch eine routine um die dateigröße abzufragen.....
-
Hallo und danke für eure Antworten!!! Mit dem geschriebenen Code konnte ich das dann endlich bewerkstelligen!!!
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!