2010-12-13 7 views
28

Gibt es einen direkten Weg, Größe der internen Zeichenfolge in stringstream zu berechnen?Größe von stringstream

Hier gibt str() eine Kopie zurück und dann erhält es die Größe der Zeichenfolge.

std::stringstream oss("String"); 
oss.str().size(); 

Antwort

15
std::stringstream oss("String"); 
oss.seekp(0, ios::end); 
stringstream::pos_type offset = oss.tellp(); 

ist für den Schreibzeiger, aber das Ergebnis ist das gleiche für Lesezeiger auf Visual C++ v10.

41

Natürlich gibt es:

std::stringstream oss("Foo"); 
oss.seekg(0, ios::end); 
int size = oss.tellg(); 

Jetzt Größe die Größe (in Bytes) enthält der Zeichenfolge.

EDIT:

Dies ist auch eine gute Idee, nach dem oben genannten Schnipsel zu setzen, wie es die internen Zeiger zurück an den Anfang der Zeichenfolge setzt. Diese

oss.seekg(0, ios::beg); 
+0

Interessant. Ich frage mich, ob dies immer das gleiche Ergebnis wie die Schreibzeiger-Äquivalente zeigt. –

+1

Wenn Sie den Schreibzeiger verwenden, müssen Sie immer noch bis zum Ende suchen? Wäre es nicht immer am Ende? – Ferruccio

+1

Gcc 4.4 scheint das nicht zu gefallen, es setzt den Stream failbit –

Verwandte Themen