Konsolenproblem



  • Nun ja, es gibt da eine Variante mit unget. Aber die ist nicht sicher, weil unget anscheinend nicht sehr sicher ist.

    Und dann könnte man sich noch eine Variante denken, bei der man eine Wortsuche einbaut, die aber berücksichtigen müsste, dass ein Teil des Wortes bereits als neues potenzielles Wort dienen könnte. Das wird aber unübersichtlich und dann sollte man das vermutlich auch performant machen, wo ich mich dann aber einlesen müsste.

    Hm, ich frage mich gerade, wieso unget() nicht gesichert ist, wenn der filestream auch seekg anbietet. Oder sind das zwei verschiedene Schienen, die man kombinieren könnte, um eine sichere stringInLine-Suche ohne Extracten zu garantieren?

    Egal. Einfach und sicher ist:

    const string searchedWord = "Apfelkompott";
    string currentLine;
    while(getline(stream, currentLine) && currentLine.find(searchedWord) == string::npos);
    
    if(!stream)
        throw InvalidFileFormat();
    
    // currentLine ist jetzt die Zeile mit dem aktuellen Suchwort
    


  • Eisflamme schrieb:

    Einfach und sicher ist:

    const string searchedWord = "Apfelkompott";
    string currentLine;
    while(getline(stream, currentLine) && currentLine.find(searchedWord) == string::npos);
    
    if(!stream)
        throw InvalidFileFormat();
    
    // currentLine ist jetzt die Zeile mit dem aktuellen Suchwort
    

    Besser ist

    const string searchedWord = "Apfelkompott";
    string currentLine;
    size_t pos;
    
    while(getline(stream, currentLine) && (pos = currentLine.find(searchedWord)) == string::npos);
    
    if(pos == string::npos)
        throw InvalidFileFormat();
    

    So hast du auch gleich die Position und musst nicht den Stream nochmal konvertieren.



  • Er hat ja nicht gesagt, ob die Position des Schlüsselworts in der Zeile überhaupt relevant ist. 🙂 Wo müsste man den Stream konvertieren?



  • Eisflamme schrieb:

    Er hat ja nicht gesagt, ob die Position des Schlüsselworts in der Zeile überhaupt relevant ist. 🙂 Wo müsste man den Stream konvertieren?

    Zeile 5.
    Und ja, du hast Recht, vielleicht braucht er die gar nicht...



  • Achso, zu bool konvertieren oder wie?

    Jetzt hab ich wieder angefangen zu überlegen: Wenn nur der Text nach dem Wort wichtig ist, kann man sich getline sparen. Ist aber deswegen albern, weil ja bei der Suche nach Socke z.B. "SSSSocke" wieder ungets erfordert. Ich hätte wirklich gerne im Standard definiert, wie häufig unget klappen muss, so fallen streng genommen viele Möglichkeiten weg. 😞


Anmelden zum Antworten