C ++:为什么get()getline()打印输入字符串的最后一个单词?

时间:2015-09-08 08:02:24

标签: c++ class output getline istream

我试图让我的程序读取一个字符串然后输出单个行上的每个单词。当我调用此函数时,它不会打印句子的最后一个单词。我一直无法找到这个问题的答案。

例如:

  

输入:

     

你好,我的朋友

     

输出:

     

您好

     

     

这是我的代码:

istream& operator >> (istream& in, FlexString& input) {
    std::string content;
    while (std::getline (in,content,' ')) {
        cout << content << endl;
    }

    return in;
}

我是C ++的新手,所以这可能很愚蠢,但我尝试在while循环后添加另一个cout调用来打印内容,但是它赢了# 39;因某种原因打印出来。

1 个答案:

答案 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;