Datei einlesen inkl. Leerzeichen



  • Hallo C++-ler,
    ich sitze jetzt schon seit Stunde vor einem Problem.
    Ich habe ein Programm geschrieben, welches eine Datei einliest (in dieser können sämtliche Zeichen und Buchstaben stehen) und dann eine Statistik ausgibt, welcher Buchstabe wie oft vorkam (dahinter dann die Prozent zu den Gesamtzeichen im Text). So weit so gut.
    Nun habe ich ein Problem mit den Leerzeichen. Ich bekomme es einfach nicht hin, dass Leerzeichen zu der Gesamtmenge der Zeichen addiert werden.
    Beispiel: rad fahren . Das sind 9 BUchstaben und 10 Zeichen. Ich bekomme aber 9 Buchstaben und 9 Zeichen raus.
    Code:

    *snip*
    cout << "\t*** Datei <" << Dateiname << "> geoeffnet... ***\n" << endl;

    Quelldatei >> Zeichen;

    while (!Quelldatei.eof())
    {
    ZeichenWert = Zeichen;
    if ((ZeichenWert>=65) && (ZeichenWert<=90))
    {++Index[ZeichenWert-65];}
    if ((ZeichenWert>=97) && (ZeichenWert<=122))
    {++Index[ZeichenWert-97];}
    ++Index[27];
    Quelldatei >> Zeichen;
    };

    Index[28]=0;
    for (int x=0; x<26; ++x) {Index[28]+=Index[x];}
    *snip*

    Kann mir jemand dazu vielleicht einen Hinweis geben, wie ich das hinbekommen kann??¿
    Für Hilfe wäre ich echt dankbar.
    Grüße.



  • Benutze doch bitte Code-Tags

    Normalerweise liest der operator>>, den du verwendest, immer bis zum nächsten leerzeichen ein. wenn du nun operator>> mit char verwendest, werden die leerzeichen ganz weggelassen.
    wenn du ein zeichen nach dem anderen willst, verwende get (eine elementfunktion des streams)
    oder, um eine ganze zeile (bis zum \n) einzulesen, std::getline (iostream &, string &)



  • mach doch mal das:

    #include <stdio.h>
    
    FILE *fp;  //ein paar Zeiger die Definiert werden müssen
    int c;
    int leerzeichen = 0;
    
    fp = fopen("Datei.txt", "r"); //Datei öffen
    while (1) {
    
    c = fgetc(fp);
    if (c == EOF) // wenn Datei zu ende schleiffe Beenden
     break;
    if (c == ' ') //wenn Zeichen gleich Leerzeichen
     leerzeichen+=1; //leerzichen + 1
    else if(c != ' ') continue;
    }
    

    jetzt hast du am endefekt ne Variable nammens leerzeichen, die addierst du einfach zu der anderen Variable mit deinen zeichen, und schon müsstest du ALLE zeichen haben, so wie du es wolltest.



  • [ Dieser Beitrag wurde am 28.05.2003 um 20:54 Uhr von H@ckepeter editiert. ]



  • Wir sind aber trotzdem im C++ Forum Hackepeter 🙂



  • Das ist C++!

    Ich kann auch nur c/c++

    [ Dieser Beitrag wurde am 28.05.2003 um 21:45 Uhr von H@ckepeter editiert. ]



  • Original erstellt von H@ckepeter:
    Das ist C++!

    Nein, das ist C.

    ScOoZ: Schon in die FAQ geschaut? Wohl kaum, oder? Ströme und Dateien in C++



  • ja toll Ist das so schlimm?
    Es geht trotzdem, ob du dem Compiller nun C oder C++ hinwurschtelst, der wird schon net Mekern ;). Auserdem kenn ich gar keinen Unterschied Zwichen C/C++ wo sind denn da genau die Unterschiede 😕



  • Danke für die Hinweise und die Tipps. Ich werde es mal ausprobieren.
    Schönen Männertag.



  • So.
    Habe es dann doch mit get() hinbekommen. Einfach den >> mit get() ausgetauscht und schon funktionierte es einwandfrei.
    Danke noch mal an alle.
    Grüße.


Anmelden zum Antworten