Wort einlesen, einzelne Buchstaben speichern und wieder ausgeben



  • Guten Tag

    Ich muss für die Schule ein Programm erstellen, welches eine Datei einliest
    (Zeile für Zeile - Bsp: Gruen;Grau;Rot;)
    und die einzelnen Wörter bis zum ";" abspeichert sprich hier die einzelnen Farben.
    Ich hoffe ihr versteht was ich meine.

    Ich habe es schon mit memcpy versucht oder mit for-Schlaufen. Aber irgendwie will es einfach nicht funktionieren 😞

    Wäre super wenn jemand einen Ansatz hätte!

    Gruss und danke

    Aza



  • Zeilenweise einlesen mit std::getline
    Abspeichern kannst du die Farben zum Beispiel in einem std::vectorstd::string
    Die ; findest du z.B. mit der find-Methode von std::string.

    Hinweis: memcpy ist vollkommen ungeeignet für diese Aufgabe.



  • ok, ich werds mal versuchen, vielen dank 🙂



  • Wenn man schon getline benutzt, so kann man hier gleich das Semikolon als Trenn-Zeichen angeben und die Worte ohne nachträgliche Aufbereitung einlesen. Etwa so:

    using namespace std;
        ifstream datei("EinFile.txt");
        for( string farbe; getline( datei, farbe, datei.widen(';') ); )
            cout << "Gelesen: [" << farbe << "]" << endl;
    

    Gruß
    Werner



  • Aza schrieb:

    Ich habe es schon mit memcpy versucht oder mit for-Schlaufen. Aber irgendwie will es einfach nicht funktionieren 😞

    Wäre super wenn jemand einen Ansatz hätte!

    Gruss und danke

    Aza

    Ansatz mit for-Schleife

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main()
    {
        ifstream datein("c:\\datei1.txt");// Eingabedatei
        ofstream dataus("c:\\datei2.txt");// Ausgabedatei
    
            for (char c; datein.good();)
            {
                    datein >> c;
                    if (c == '\n')
                    {
                            dataus << c;
                            continue;
                    }
                    if (c == ';')
                            c = '\n';
    
                    dataus << c;
            }
            return 0;
    }
    

    :xmas1:



  • Ich hätte 2 Ansätze zu bieten.
    a)
    1. Mit getline einlesen
    2. Die Positionen der Trennzeichen speichern
    3. Die Wörter danach einzeln rausschneiden.
    String hat solche Funktionen. Ich hab es zumindest so schon einmal gemacht.

    b) Mein Favorit
    1. Mit getline Zeile einlesen
    2. Mit Hilfe von der Funktion isalpha die ";" in " " umwandeln.(Ueber den String iterieren und fuer jedes char checken im String.)

    if(isalpha(c))return c;
    else return ' ';
    

    3. Den String in einen istringstream verwandeln.

    stringstream s(line);
    

    4. Aus dem stringstream die einzelnen Wörter rausholen. In etwa so:

    string str;
    while(s>>str){...}
    

    5.Die strings in einen Vektor packen.
    6.Nächste Zeile

    MFG
    chewbo


Anmelden zum Antworten