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

时间:2018-01-28 21:02:28

标签: c++ 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 !

1 个答案:

答案 0 :(得分:0)

虽然我不同意你在这里采取的方法,但这是我如何解决你当前的问题:

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

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

这将读取文件中的每一行,并将其添加到名称中,同时忽略空格(无论如何都没有)和换行符(表示行的结尾)。

输出:

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

在名字和姓氏之间添加一个空格应该是微不足道的,但是我想说你应该忽略空格。