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

C++: Why won't getline() print the last word of the input string?

本文关键字:字符串 输入 最后一个 单词 打印 为什么 getline C++      更新时间:2023-10-16

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

例如:

输入:

你好,我的朋友

输出:

你好

下面是我的代码:
istream& operator >> (istream& in, FlexString& input) {
    std::string content;
    while (std::getline (in,content,' ')) {
        cout << content << endl;
    }
    return in;
}

我是c++的新手,所以这可能是愚蠢的,但我尝试添加另一个cout调用来打印内容在while循环之后的下一行,但由于某种原因它不会打印它。

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;