Skullcandy Geschrieben 16. November 2009 Geschrieben 16. November 2009 Hey, soll von der Schule aus diese Aufgabe programmieren: Aufgabenstellung: Schreiben Sie ein Programm, das den Inhalt einer Text-Datei analysiert. Dazu sei die Datei faust.txt gegeben, die den folgenden Inhalt (aus Goethes Faust) hat: > more faust.txt Da steh ich nun, ich armer Tor! Und bin so klug als wie zuvor; > Das Programm faust.c soll nun die Häufigkeit eines bestimmten Buchstabens, den der Benutzer wählen kann, in dieser Datei ermitteln. Ein Programmlauf sollte wie folgt aussehen: > ./faust Ich kann Goethe-Texte fuer Sie auswerten. Welchen Buchstaben moechten Sie zaehlen? n Die erste Zeile lautet: "Da steh ich nun," Es gibt den Buchstaben n 2 Mal in dieser Zeile. Die zweite Zeile lautet: "ich armer Tor! " Es gibt den Buchstaben n 0 Mal in dieser Zeile. Die dritte Zeile lautet: "Und bin so klug " Es gibt den Buchstaben n 2 Mal in dieser Zeile. Die vierte Zeile lautet: "als wie zuvor; " Es gibt den Buchstaben n 0 Mal in dieser Zeile. > Um die Sache zu vereinfachen, können Sie davon ausgehen, dass jede Zeile in der Datei faust.txt aus exakt 16 Zeichen besteht. (Das ist normalerweise natürlich nicht der Fall. Die Datei wurde so modifiziert, dass sie diese Bedingung erfüllt. Wir werden später lernen, wie man mit beliebig langen Zeilen umgeht.) Ich hab eigl schon soweit alles gemacht, dachte ich zumindest. Wenn ich das Programm dann ausführen, dann kommt eine Fehlermeldung und das Fenster wird geschlossen:( #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fp; fp = fopen("C:\\Prg\\faust.txt","r"); char v; char c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16; int count = 0; printf("Ich kann Goethe-Texte fuer Sie auswerten.\n Welchen Buchstaben moechten Sie zaehlen?"); scanf("%c",v); fscanf(fp,"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8,&c9,&c10,&c11,&c12,&c13,&c14,&c15,&c16); if (v == c1) { count +=1; } if (v == c2) { count +=1; } if (v == c3) { count +=1; } if (v == c4) { count +=1; } if (v == c5) { count +=1; } if (v == c6) { count +=1; } if (v == c7) { count +=1; } if (v == c8) { count +=1; } if (v == c9); { count +=1; } if (v == c10) { count +=1; } if (v == c11) { count +=1; } if (v == c12) { count +=1; } if (v == c13) { count +=1; } if (v == c14) { count +=1; } if (v == c15) { count +=1; } if (v == c16) { count +=1; } printf("Die erste Zeile lautet: Da steh ich nun,\nEs gibt den Buchstaben %c%i Mal in dieser Zeile.",v,count); system("PAUSE"); return 0; Es ist zwar tierisch lang, aber ich kann leider noch nicht mit schleifen umgehen.:confused: Vielleicht kann mir jemand auch noch einen tipp geben wie man das verkürzen kann:rolleyes: Ich weiß echt nicht was ich da falsch gemacht habe... Wäre super nett wenn mir da jemand helfen könnte:) Zitieren
TDM Geschrieben 17. November 2009 Geschrieben 17. November 2009 Es ist zwar tierisch lang, aber ich kann leider noch nicht mit schleifen umgehen.:confused: Dann solltest du es lernen. C++ Tutorial - Schleifen Vielleicht kann mir jemand auch noch einen tipp geben wie man das verkürzen kann:rolleyes: Vielleicht hilft dir das ja: int strcount(const string& str, char c) { int count = 0; for(unsigned int i = 0; i < str.length(); i++) if(str[i] == c) count++; return count; } Zitieren
Klotzkopp Geschrieben 17. November 2009 Geschrieben 17. November 2009 Vielleicht hilft dir das ja: C ist angesagt Ansonsten wäre das ziemlich einfach: char c; cin >> c; ifstream in("faust.txt"); cout << count( istream_iterator<char>(in), istream_iterator<char>(), c); [/code] Zitieren
TDM Geschrieben 17. November 2009 Geschrieben 17. November 2009 C ist angesagt hoopla. :upps Naja, macht nichts: int strcount(const char* str, char c, int strlen) { int count = 0; for(int i = 0; i < strlen; i++) if(str[i] == c) count++; return count; } Zitieren
Skullcandy Geschrieben 17. November 2009 Autor Geschrieben 17. November 2009 Hey schon mal vielen Dank für die antworten... aber kann mir jemand sagen wo mein fehler liegt? Weil eigl müsste das so ja auch funktionieren, oder nicht? Wieso stürzt der denn ab wenn ich das Programm ausführen möchte? Zitieren
TDM Geschrieben 17. November 2009 Geschrieben 17. November 2009 Weil eigl müsste das so ja auch funktionieren, oder nicht? Wieso stürzt der denn ab wenn ich das Programm ausführen möchte? init von v fehlt z.B.. Zitieren
Skullcandy Geschrieben 18. November 2009 Autor Geschrieben 18. November 2009 init von v fehlt z.B.. Wieso fehlt das denn? Oben ist char v definiert und dann auch noch scanf("%c",v)... Oder verstehe ich da etwas falsch?:confused: Zitieren
Klotzkopp Geschrieben 18. November 2009 Geschrieben 18. November 2009 Wenn du mit scanf in eine char-Variable einliest, musst du deren Adresse übergeben. Zitieren
Skullcandy Geschrieben 18. November 2009 Autor Geschrieben 18. November 2009 Puhh jetzt bin ich völlig überfordert:) Wie mache ich das denn? jetzt mal für ganz doofe... habe schon ein bisschen rumprobiert, aber dann kommt vom kompiler immer eine fehlermeldung:( Zitieren
Skullcandy Geschrieben 18. November 2009 Autor Geschrieben 18. November 2009 Ich trottel:D Es ist ja nur das &davor... okay.. vielen vielen dank für die hilfe, ihr seid super:) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.