Cin之后的C ++ Getline

时间:2014-04-17 14:52:12

标签: c++ space cin getline

我正在尝试编写一个以特定方式获取用户输入的程序。 首先,我输入一个不包含空格的单词; 然后,我输入另一个可能包含空格的单词; 程序分别输出2个单词。

例如,我输入了#34;汤姆是一个懒惰的男孩" 然后程序输出"汤姆:一个懒惰的男孩"

这是我试图做的事情:

int main(){
    string a;
    cin >> a;
    string b;
    getline(cin, b);
    cout << a << ":" << b<< endl;
}

我尝试在cin之后使用getline,但输出看起来像:&#34; Tom:一个懒惰的男孩&#34;

如果我输入&#34;汤姆(很多空格)一个懒惰的男孩&#34;然后它输出&#34;汤姆:(很多空间)一个懒惰的男孩&#34; 我想要不要那些空间。有更好的方法吗?

我看到有些方法需要在cin之后编辑字符串,但是我们可以在输入阶段解决问题吗?

3 个答案:

答案 0 :(得分:1)

getline()读取空格,如果要忽略前导空格,请尝试:

cin.ignore();
getline(cin, b);

编辑: 对不起,这确实是1个字符,这是另一种解决方案:

    getline(cin, b);
    string noLeadingWS = b.substr(b.find_first_not_of(' '),b.length()-b.find_first_not_of(' '));
    cout << a << ": " << noLeadingWS<< std::endl;

答案 1 :(得分:1)

std::getline函数不像正常输入操作符>>那样跳过空格。你必须自己删除前导(以及可能的尾随?)空格。

删除前导空格可以先找到第一个非空白字符(例如std::find_if),然后从该位置获取一个子字符串(使用std::string::substr)。


或者如dyp所示,使用std::ws。链接引用有一个很好的例子如何使用它。

答案 2 :(得分:0)

所以看起来你的程序只是抓住你在程序中放置的空间,你可以通过几种方式摆脱它!

  1. 你可以自己使用cin.get()逐字符串地输入输入,然后将它们添加到一个字符串中,直到你得到一个空格然后继续,但不要添加空格,直到你得到的东西为&n&n #39; ta space,然后使用你的getline,或者你可以继续你的自定义流媒体这一次寻找换行符!

  2. 您只需编辑生成的字符串即可轻松删除多余的空格,请查看substr()方法!