stringstream代码分隔单词 - 这个东西是如何工作的?里面的代码片段

时间:2012-06-28 21:01:26

标签: c++ bitwise-operators stringstream

我有这个代码,我发现将字符串切成单词。 我无法弄清楚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);

2 个答案:

答案 0 :(得分:5)

  

我只是无法弄清楚它是如何知道用空格切割单词的

由于buf的类型为std::string,因此您需要阅读左侧为operator>>std::istreamstd::string的{​​{1}}说明右边。

引用cppreference.com

  

提取字符并将其附加到str,直到:

     我会读取

N个字符,其中Nis.width() is.width() > 0,否则Nstr.max_size()

     

is

读取EOF标记      

isspace(c,is.getloc())适用于is中的下一个字符。

最后一句用英语说,“如果下一个字符是空格则停止”

答案 1 :(得分:4)

那是std::operator>>,而不是按位运算符,用于提取格式化数据,在本例中为std::string。它返回对正在读取的流的引用。

由于stringstream转换{{1}},它可以在布尔上下文中使用,允许它用作循环中的终止条件。