1

文字列を単語にカットするために見つけたこのコードがあります。while部分がどのように機能するのか理解できません。空白のない単語をbuf変数に抽出することをどのように知っていますか?抽出演算子(>>)は、ビットをバッファーに進めるためと、ループに対してtrueを返すための両方に使用されているようです。空白で単語を切り取る方法がわかりません。

string buf; // Have a buffer string
stringstream ss(str); // Insert the string into a stream

vector<string> tokens; // Create vector to hold our words

while (ss >> buf)
    tokens.push_back(buf);
4

2 に答える 2

5

空白で単語をカットすることがどのようにわかっているのか理解できません

のタイプはですのでbuf、左側に、右側にあるの説明をstd::string読む必要があります。operator>>std::istreamstd::string

cppreference.comを引用するには

文字が抽出されstr、次のいずれかになるまで追加されます。

N文字が読み取られます。ここで、は、それ以外の場合はN、です。is.width()is.width() > 0Nstr.max_size()

EOFマーカーは、、isまたはから読み取られます

isspace(c,is.getloc())の次の文字についてはtrueですis

その最後の節は、英語で「次の文字がスペースの場合は停止する」と言っています

于 2012-06-28T21:25:53.570 に答える
4

つまりstd::operator>>、ビット演算子ではなく、フォーマットされたデータ(この場合は)を抽出するために使用されstd::stringます。読み取られているストリームへの参照を返します。

Astringstreamは、変換によりブールコンテキストで使用できoperator void*()、ループの終了条件として使用できます。

于 2012-06-28T21:10:16.783 に答える