我试图让我的程序读取一个字符串然后输出单个行上的每个单词。当我调用此函数时,它不会打印句子的最后一个单词。我一直无法找到这个问题的答案。
例如:
输入:
你好,我的朋友
输出:
您好
有
我
这是我的代码:
istream& operator >> (istream& in, FlexString& input) {
std::string content;
while (std::getline (in,content,' ')) {
cout << content << endl;
}
return in;
}
我是C ++的新手,所以这可能很愚蠢,但我尝试在while循环后添加另一个cout
调用来打印内容,但是它赢了# 39;因某种原因打印出来。
答案 0 :(得分:2)
getline
没有跳过最后一个字。它还在等你完成它。您选择空格字符(' '
)作为分隔符,因此getline将读取,直到找到空格(不是制表符或换行符),或直到输入流结束。就像你似乎期待的那样,你的循环也不会停在线的末端。它将继续阅读,直到流结束。
如果你想读取一行,然后逐字分开,那么只需用getline
分隔符(这是默认值)调用\n
一次。然后使用istringstream
逐字分隔生成的字符串。
std::string line;
std::getline(in, line);
std::istringstreaam iss(line);
std::string content;
while (iss >> content)
std::cout << content << std::endl;