2010-12-13 5 views
28

ストリングストリームの内部ストリングのサイズを直接計算する方法はありますか?ストリングストリームのサイズ

ここで、str()はコピーを返し、文字列のサイズを取得します。もちろん

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

答えて

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

これは、書き込みポインタのためですが、その結果は、Visual C++のv10の上のリードポインタでも同じです。

41

があります:

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

さて、サイズは、文字列のサイズ(バイト単位)が含まれています。

EDIT:

また、これは、それが戻って、文字列の先頭に内部ポインタを置くと上記のスニペットの後に置くことをお勧めします。

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

興味深い。私はこれが常に同等の書き込みポインタと同じ結果を表示するのだろうかと思います。 –

+1

書き込みポインタを使用する場合は、最後まで探索する必要がありますか?それはいつも終わりではないでしょうか? – Ferruccio

+1

Gcc 4.4はこれが好きではないようですが、ストリームフェイルビットを設定します –