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

标签 c++ class output getline istream

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

例如:

Input:

Hello there my friend

Output:

Hello

there

my

这是我的代码:

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

    return in;
}

我是 C++ 的新手,所以这可能很愚蠢,但我尝试添加另一个 cout 调用以在 while 循环后的下一行打印 content 但它赢了'出于某种原因打印它。

最佳答案

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;

关于C++:为什么 getline() 不打印输入字符串的最后一个字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452337/

相关文章:

c++ - 如何使用 boost iostreams 进行流式解压缩

c++ - 在 Cimg 上创建的图像在使用 GDI+ 保存时在 pdf 上显示不同,而在 pdf 上使用 jagPDF 创建

class - scala类的类型参数中的冒号是什么

C++ 从二进制文件中读回 "incorrect"值?

python - 检查目标 : expected dense_1 to have 3 dimensions, 时出错,但得到形状为 (118, 1) 的数组

c++ - 尝试编译 C 扩展模块时缺少 Python.h

原型(prototype) getter 访问的 Javascript 私有(private)属性

java - 从另一个类调用一个类而无需更改类类型(或返回)Java

c - 需要帮助编写此乘法代码

c++ - 外部函数的模板化类参数