Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe bestimmte Zeichen im txt ersetzten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.03.2014, 11:06 Uhr
TheKinji



Guten Tag,
bin ein Anfänger in C++.
In der Schule haben wir gerade das Thema "Eingabe und Ausgabe von Dateien".
Eine Datei kann ich über C++ öffnen und sogar bestimmte Zeichen zählen. Aber ein Zeichen ersetzten ist für mich sehr kompliziert. Ich sitze gerade an einer Aufgabe, wo verlangt wird, dass man ein Textdokument (darin steht ein Gedicht) öffnet, überprüft(f.open, f.good usw...) und ein bestimmtes Zeichen zählt. Dieses Zeichen soll man in einen neuen Text Dokument ersetzten durch ein anderes (z.B. durch eine 8). Das Text Dokument kann ich soweit öffnen und die Zeichen kann ich auch zählen, bloß weiß ich nicht wie ich ein Zeichen durch ein anderes ersetzten kann Kann mir da jemand weiterhelfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.03.2014, 12:02 Uhr
ao

(Operator)


Zeig doch mal, was du bisher hast.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.03.2014, 12:39 Uhr
TheKinji




Zitat von ao:
Zeig doch mal, was du bisher hast.


Soweit bin ich jetzt:

C++:
int main(){

    fstream fin;
    fstream fout;
    string kopie;
    string zeile;
    int zaehler = 0;
    

    fin.open("MH.txt",ios::in);
    fout.open("MH_new.txt",ios::out);

    if(fin.good() && fout.good()){

        cout << "Datei konnte geöffnet werden!" << endl;

        while(!fin.eof()){

            getline(fin,zeile);
            cout << zeile << endl;

            for(int i = 0; i < zeile.length(); i++){
                if (zeile[i] == '7'){
                zaehler++;
            cout << "Zahl 7 kam: " << zaehler << "mal vor " << endl;

                }
            }
            }
        }
        
            system("pause");
            return 0;
        }



----
Edit: cpp-Tags eingefügt.

Dieser Post wurde am 25.03.2014 um 03:02 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.03.2014, 15:56 Uhr
ao

(Operator)


Schon mal gar nicht schlecht.

Weißt du, dass du mit string::replace Teile eines Strings ersetzen kannst?

Und dass du mit fout << zeile die veränderte Zeile in die Out-Datei kriegst?

Gute C++-Referenz-Seite: www.cplusplus.com/reference/string/string/

Nochn Hinweis: Das Konstrukt

C++:
for (int i = 0; i < zeile.length (); i++)
if (zeile[i] == '7)
.....


ist "intuitive C-Programmierung". Das tut zwar das Richtige, aber mit C++-Strings geht man eigentlich anders um: Mit string::find_first_of kriegst du ohne For-Schleife direkt die Position des ersten Treffers (oder string::npos, falls kein Treffer da ist)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.03.2014, 07:06 Uhr
TheKinji




Zitat von ao:
Schon mal gar nicht schlecht.

Weißt du, dass du mit string::replace Teile eines Strings ersetzen kannst?

Und dass du mit fout << zeile die veränderte Zeile in die Out-Datei kriegst?

Gute C++-Referenz-Seite: www.cplusplus.com/reference/string/string/

Nochn Hinweis: Das Konstrukt

C++:
for (int i = 0; i < zeile.length (); i++)
if (zeile[i] == '7)
.....


ist "intuitive C-Programmierung". Das tut zwar das Richtige, aber mit C++-Strings geht man eigentlich anders um: Mit string::find_first_of kriegst du ohne For-Schleife direkt die Position des ersten Treffers (oder string::npos, falls kein Treffer da ist)



Okey dass mit fout << zeile wusste ich, die anderen hatte ich noch nie gehabt.(Sehen aus wie Funktionen und Funktionen hatte wir eigentlich auch noch nie^^)

Ich habe es jetzt mal so geklärt, auf so einer Weise:

C++:
fstream fin, fout;
    fin.open("MH.txt", ios::in);
    fout.open("MH_new.txt", ios::out);
    if (fin.good() && fout.good()){
        cout << "Dateien konnten geoeffnet werden" << endl;
        string zeile;
        string kopie;
        while (!fin.eof()){
            getline(fin, zeile);
            cout << zeile << endl;
            for (int i=0; i < zeile.length(); i++){
                if (zeile[i] == '7'){
                    //cout << "8 gelesen" << endl;
                    kopie += "nyan";
                }
                else {
                //cout << "Zeichen ungleich 8 gelesen" << endl;
                    kopie += zeile[i];
                }
            } // for
            kopie += '\n';
            cout << kopie << endl;
        }// while
        fout << kopie;
        fin.close();
        fout.close();
    }
    else {
       cout << "Dateien konnten nicht geoeffnet werden" << endl;
    }

    system("pause");
    return 0;

}


Könnte man dass irgendwie etwas umschreiben, dass es kürzer erscheint :/?

edit von ao: CPP-Tags eingesetzt. Bitte in Zukunft selber machen.

Dieser Post wurde am 25.03.2014 um 08:56 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.03.2014, 08:59 Uhr
ao

(Operator)



Zitat von TheKinji:
Okey dass mit fout << zeile wusste ich, die anderen hatte ich noch nie gehabt.(Sehen aus wie Funktionen und Funktionen hatte wir eigentlich auch noch nie^^)


Du verwendest aber open, close, eof, length und so weiter. Das sind auch Funktionen.

Um den Rest kümmer ich mich später.

Dieser Post wurde am 25.03.2014 um 09:00 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: