[英]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
。 链接的参考文献中有一个很好的示例。
因此,看起来您的程序只是在抢占您放入程序中的空间,您可以通过几种方法摆脱它!
您可以使用cin.get()字符逐个流输入,然后将它们添加到字符串中,直到获得空格,然后继续操作,但不要添加空格,直到得到非空格的东西,然后再使用getline,否则您可以继续自定义流式传输,寻找换行符!
您只需编辑结果字符串即可轻松删除超级多余的空格,请查看substr()方法!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.