我正在尝试编写一个以特定方式获取用户输入的程序。 首先,我输入一个不包含空格的单词; 然后,我输入另一个可能包含空格的单词; 程序分别输出这2个单词。
例如,我输入“汤姆是一个懒惰的男孩” 然后程序输出“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
。链接的引用文献有一个很好的使用示例。
关于Cin 之后的 C++ Getline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136487/