读取包含 space 分隔字符串的一行输入,并使用 getline 将它们显示为一个完整的行

Read a line of input including space-delimited strings and display them as a single complete line using getline

我正在尝试制作一个简单的程序 (hello.cpp),它使用 getline 以测试文件的形式接收用户输入并将其打印回屏幕上。

代码如下所示:

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char ** argv) {
    string name;
    cout << "What is your name?" << endl;
    getline(cin, name);
    cout << "Hello " << name << "!" << endl;

    return 0; 
}

我正在使用的测试文件(test.txt)如下所示:

|
|
|John
|Doe
|

忽略垂直线,我只是把它们放在那里代表换行符

我正在尝试让 getline 忽略制表符和换行符,只将文本文件中的内容作为一个字符串来读取。

我想要的输出如下所示:

$./hello < test.txt
What is your name?
Hello John Doe!

我得到的是这样的:

$./hello < test.txt
What is your name?
Hello !

虽然我不同意您在这里采用的方法,但我会通过以下方式解决您当前的问题:

由于 test.txt 中的名称被分成多行,您必须继续使用 getline 直到没有更多的输入。因此,您应该使用以下而不是单个 getline 语句:

string input;
while (getline(cin, input))
{
    name += input;
}

这会读取文件中的每一行,并将其添加到名称中,同时忽略白色space(无论如何都有none)和换行符(表示一个结尾线)。

输出:

$./hello < test.txt
What is your name?
Hello JohnDoe!

在名字和姓氏之间添加一个 space 应该是微不足道的,但我要摆脱你说 whitespace 应该被忽略的事实。