Wie funktioniert ein stringstream?



  • Hallo,

    ich initialisiere einen stringstream mit:

    std::stringstream stream("irgendwas");

    Mittels

    stream >> passendeVariable;

    werte ich das aus.
    Danach möchte ich ein Resultat in den Stream schreiben mit:

    stream << "Resultat" << std::endl;

    Aber es kommt nix an. Der String im stream - Objekt enthält immer noch "irgendwas".

    Wie kann ich mein Ergebnis in diesen Stream schreiben?



  • stream.str("Resultat");
    


  • Dein Ergebnis wird schon im stream sein. Der String "irgendwas" steht aber noch davor. Du kannst ja den Stream mit stream.str("") mal leer machen bevor du erneut reinschreibst.



  • Mhm,

    stream.str("Resultat");

    scheidet aus, weil ich Zahlen in den String schreiben (konvertieren) will.

    stream.str("");
    stream << 5;

    leert zwar den String, die zweite Instruktion schreibt aber nichts hinein, bleibt völlig ohne Wirkung ... 😕



  • stream = std::stringstream();
    stream << 5;
    


  • Das geht nicht, Copy - Konstruktor ist privat, behauptet mein Compiler.



  • std::stringstream s;
    s << "Resultat";
    
    std::string r;
    s >> r;
    
    int resultat = 2;
    s << resultat;
    


  • Ich kapiere einfach die Funktionsweise nicht - so bekomme ich, was ich will, außer das in a NaN steht, es wird schließlich nicht initialisiert.
    Wenn ich die auskommentierte Zeile aktiviere, habe ich in a einen vernünftigen Wert (12), aber im Stringstream steht am Ende noch immer "12".
    D.h. wenn ich vorher meinen stringstream formatiert auslese, kann ich nicht mehr reinschreiben?

    #include <sstream>
    #include <iostream>
    
    int main()
    {
    	std::stringstream ss("12");
    
    	double a;
    
    	std::cout << ss.str() << std::endl;
    	//ss >> a;
    	std::cout << "Im Stream ist: " << a << std::endl;
    	ss << "12 mal 2 ist " << 12 * 2 << std::endl;
    
    	std::cout << ss.str() << std::endl;
    }
    


  • Ersetz einfach mal das :

    std::stringstream ss("12");
    

    mit:

    std::stringstream ss;
    ss << "12";
    


  • Ich hab's:

    stream.clear();

    an geeigneter Stelle, und es fluppt, vermutlich ist nach dem Auslesen eof oder so was gesetzt, und verhindert zunächst mal die weitere Nutzung.



  • Belli schrieb:

    Ich kapiere einfach die Funktionsweise nicht - so bekomme ich, was ich will, außer das in a NaN steht, es wird schließlich nicht initialisiert.
    Wenn ich die auskommentierte Zeile aktiviere, habe ich in a einen vernünftigen Wert (12), aber im Stringstream steht am Ende noch immer "12".
    D.h. wenn ich vorher meinen stringstream formatiert auslese, kann ich nicht mehr reinschreiben?

    Vermutlich ist nach dem formatierten Auslesen ein Fehlerflag gesetzt, weil der Stream bei EOF angekommen ist. Mit ss.clear() kannst du wieder reinschreiben.



  • LordJaxom schrieb:

    Vermutlich ist nach dem formatierten Auslesen ein Fehlerflag gesetzt, weil der Stream bei EOF angekommen ist. Mit ss.clear() kannst du wieder reinschreiben.

    Ja, so ist es, siehe einen Post vor Deinem.

    Trotzdem herzlichen Dank an alle!


Log in to reply