ostringstream leeren!
-
Hallo zusammen!
Folgender Fall:
#include <sstream> #include <string> #include <iostream> using namespace std; int main() { int d = 1; char leer; ostringstream Str; do { Str << d; string ZahlAlsString(Str.str()); cout << ZahlAlsString << endl; d++; }while(d < 5); cin.get(); }
Ausgabe:
1
12
123
1234Das Problem besteht darin, dass ich bei jedem Durchlauf
der Schleife zwar den INT d um eins erhoehe.
Nur wird er immer an den vorher bereits ausgegebenen angehaengt.
Dies wollte ich duch ein leeren von Str, am anfang der Schleife,
regeln.Aber wie?
-
Vielleicht so
Str.str("")
-
Str.seekp(0);
-
Also
Str.str("");
hat funktioniert.
Bei:
Str.seekp(0);
wird nichts mehr ausgegeben.
Trozdem vielen Dank!
-
haderlump22 schrieb:
Bei:
Str.seekp(0);
wird nichts mehr ausgegeben.
Trozdem vielen Dank!
bei folgender implementation ...
using namespace std; int main() { int d = 1; char leer; ostringstream Str; do { Str << d; string ZahlAlsString(Str.str()); cout << ZahlAlsString << endl; d++; Str.seekp(0); }while(d < 5); cin.get(); }
ist deine aussage falsch
-
Hallo,
Mal als Frage
Welche seek_dir (cur, beg, end) ist bei seekp (oder seekg) als Standard gesetzt. Also wenn keine angegeben wird.
Ich schreib das sicherheitshalber immer dazu. (also seekp(0, ios::beg))Ciao
-
Wie wäre es damit, den ostringstream einfach im do-Block zu deklarieren? Dann ist es jedes Mal ein frischer. Variablen so lokal wie möglich zu deklarieren ist eine gute Angewohnheit.
-
Ich kenn zwar die genaue Implementation des ostringstream nicht, denke aber, daß ständige Speicherallokation (Ctor) und Freigabe (Dtor) in der Schleife keine so gute Idee ist...
-
in Stream enthält leider relativ viel State (failbit etc.), da ist mir ein sauberer Stream lieber als Code, bei dem ich nachdenken muss. Optimierung kommt später