我有这个代码,我发现将字符串切成单词。 我无法弄清楚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);
答案 0 :(得分:5)
我只是无法弄清楚它是如何知道用空格切割单词的
由于buf
的类型为std::string
,因此您需要阅读左侧为operator>>
且std::istream
为std::string
的{{1}}说明右边。
提取字符并将其附加到
我会读取str
,直到:
N
个字符,其中N
为is.width()
is.width() > 0
,否则N
为str.max_size()
,从
读取EOF标记is
或
isspace(c,is.getloc())
适用于is
中的下一个字符。
最后一句用英语说,“如果下一个字符是空格则停止”
答案 1 :(得分:4)
那是std::operator>>
,而不是按位运算符,用于提取格式化数据,在本例中为std::string
。它返回对正在读取的流的引用。
由于stringstream
转换{{1}},它可以在布尔上下文中使用,允许它用作循环中的终止条件。