Dafür steht die Funktion istringstream::str(std::string&)
zur Verfügung. Man muss jedoch den Zustand des String-Streams beachten.
Beispiel:
std::string sstr1("1.0 2");
std::string sstr2("1.0 2");
int i;
double d;
std::istringstream ist(sstr1);
ist >> d;
// Zustand : d = 1.0; sstr1 = " 2"
ist.str(sstr2);
// okay, Zustand: ist = "1.0 2"
ist >> d >> i;
// Zustand: d = 1.0, i = 2, ist =""
ist.str(sstr1);
// das ging schief, Zustand: ist = ""
Die letzte Initialisierung schlug fehl. Der Grund dafür liegt darin, dass sich der Stream seinen Zustand merkt und in verschiedenen Zustandsbits sichert. Der Zustand kann man mit den Funktionen good()
, eof()
, fail()
und bad()
abfragen. Ein Stream, dessen Zustand nicht good
ist, ignoriert jede weitere Aktion. Das ist im obigen Fall eingetreten, da der Stream nach der Extraktion seines letzten Zeichens leer war. Um den Stream wieder in den Zustand good
zu versetzen und weitere Aktionen durchführen zu können, muss die Funktion clear()
aufgerufen werden. Damit erweitert sich das Beispiel zu:
std::string sstr1("1.0 2");
std::string sstr2("1.0 2");
int i;
double d;
std::istringstream ist(sstr1);
ist >> d;
// Zustand : d = 1.0; sstr1 = " 2"
// Falls Zustand nicht good, clear()
if (!ist.good())
ist.clear();
ist.str(sstr2);
// okay, Zustand: ist = "1.0 2"
ist >> d >> i;
// Zustand: d = 1.0, i = 2, ist =""
// oder sofort clear()
ist.clear();
ist.str(sstr1);
// Zustand : ist = "1.0 2"