String-Streams

Hallo,

weiss jemand, wie man einem String-Stream-Objekt einen String zuweist?
Ich benutze das in definierte istringstream und habe bisher rausgefunden, dass folgende Zuordnungen moeglich sind:

string text( "Eine Nachricht aus vielen Woertern." );
istringstream strom( text );

oder alternativ

string text( "Eine Nachricht aus vielen Woertern." );
istringstream strom;
strom.str( text );

Dies klappt wunderbar. Zum Beispiel kann ich ‚strom‘ ohne weiteres auslesen:

while (strom \>\> wort)
 cout 
, wobei wort ein string-Objekt ist.
Nun moechte ich den String-Stream 'strom' nach getaner Arbeit mit einem neuen String (z.B. string neuer\_text) verknuepfen. Wenn ich aber schreibe

    
    strom.str( neuer\_text );


, so bleibt mein Strom leer. Weiss jemand Rat?

Viele Gruesse
Jens

Hallo,

weiss jemand, wie man einem String-Stream-Objekt einen String
zuweist?
Ich benutze das in definierte
istringstream und habe bisher rausgefunden, dass
folgende Zuordnungen moeglich sind:

string text( „Eine Nachricht aus vielen Woertern.“ );
istringstream strom( text );

oder alternativ

string text( „Eine Nachricht aus vielen Woertern.“ );
istringstream strom;
strom.str( text );

Dies klappt wunderbar. Zum Beispiel kann ich ‚strom‘ ohne
weiteres auslesen:

while (strom >> wort)
cout
, wobei wort ein string-Objekt ist.
Nun moechte ich den String-Stream ‚strom‘ nach getaner Arbeit
mit einem neuen String (z.B. string neuer_text) verknuepfen.
Wenn ich aber schreibe

strom.str( neuer_text );

, so bleibt mein Strom leer. Weiss jemand Rat?

Theorethisch mußt du den Stream wieder zurück setzen, d.h. die stream states re-initialisieren. Praktisch ist der Aufwand dafür so groß, wie das Anlegen eines neues Streams. Da die Konstruktor-Initialisierung schneller sein wird, als manuell die einzelnen flags zurück zu setzen, ist es recommended ein neues stream-objekt zu erstellen.

Willst du es dennoch machen, so musst du zumindest clear() mit ios::failbit usw. aufrufen. Ansonsten ist der stream im Zustand eof, daran ändert auch die Zuweisung nichts.

Gruß Markus

Hallo Wortfuchs,

vielen Dank fuer deine Hilfe.
Ich hatte zuvor schon mal versucht, die Status-Flags mittels der Memberfunktion setstatus(ios_base::goodbit) usw. zu manipulieren, was aber nicht zum erwuenschten Erfolg fuehrte. Das clear() loest tatsaechlich saemtliche Probleme.

Viele Gruesse
Jens