繁体   English   中英

Cin之后的C ++ Getline

[英]C++ Getline after Cin

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

例如,我输入“ Tom a lazy boy”,然后程序输出“ Tom:a lazy boy”

这是我尝试做的事情:

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

我在cin之后尝试使用getline,但是输出看起来像:“ Tom:一个懒惰的男孩”

如果我输入“ Tom(许多空格)一个懒惰的男孩”,那么它输出“ Tom :(许多空格)一个懒惰的男孩”,我不想使用那些空格。 有一个更好的方法吗?

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

getline()读取空格,如果您想忽略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;

std::getline函数不会像普通输入运算符>>那样跳过空格。 您必须自己删除前导(和可能的尾随?)空格。

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


或者像dyp建议的那样,使用std::ws 链接的参考文献中有一个很好的示例。

因此,看起来您的程序只是在抢占您放入程序中的空间,您可以通过几种方法摆脱它!

  1. 您可以使用cin.get()字符逐个流输入,然后将它们添加到字符串中,直到获得空格,然后继续操作,但不要添加空格,直到得到非空格的东西,然后再使用getline,否则您可以继续自定义流式传输,寻找换行符!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM