我正在尝试编写一个以特定方式获取用户输入的程序.
首先,我输入一个不包含空格的单词;
然后,输入另一个可能包含空格的单词;
程序分别输出两个单词.
例如,我输入“汤姆一个懒男孩”
然后程序输出“ Tom:一个懒惰的男孩”
这是我尝试做的事情:
int main(){
string a;
cin >> a;
string b;
getline(cin, b);
cout << a << ":" << b<< endl;
}
我在cin之后尝试使用getline,但是输出看起来像:“ Tom:一个懒惰的男孩”
如果我输入“ Tom(许多空格)一个懒惰的男孩”,那么它输出“ Tom :(许多空格)一个懒惰的男孩”
我不想这些空间.有一个更好的方法吗?
我看到有一些方法需要在cin之后编辑字符串,但是我们可以在输入阶段解决问题吗?
解决方法:
std::getline
函数不会像普通输入运算符>>那样跳过空格.确实.您必须自己删除前导(和可能的尾随?)空格.
删除前导空白可以通过首先找到第一个非空白字符(例如std::find_if
),然后从该位置到其余字符(使用std::string::substr
)来获得.
或如dyp建议的那样,使用std::ws
.链接的参考文献中有一个很好的示例.