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



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

我只是不知道它是如何知道用空格剪切单词的

由于buf的类型是 std::string ,您需要阅读左侧std::istream和右侧std::stringoperator>>描述。

引用 cppreference.com

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

读取N个字符,如果is.width() > 0N is.width(),否则N str.max_size()

is读取EOF标记,或

isspace(c,is.getloc()) 对于is中的下一个角色也是如此。

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

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

一个stringstream可以在布尔上下文中使用,因为它的转换operator void*(),允许它用作循环中的终止条件。

相关内容

最新更新