Cin 之后的 C++ Getline

标签 c++ space cin getline

我正在尝试编写一个以特定方式获取用户输入的程序。 首先,我输入一个不包含空格的单词; 然后,我输入另一个可能包含空格的单词; 程序分别输出这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/

相关文章:

c++ - 如何调用成员初始化列表中引用成员的构造函数?

c++ - 映射/设置迭代器不兼容 - 检查映射中是否存在键

css - div之间出现空格

C++ - 检查 cin 是否有错误

c++ - 两次使用cin的问题

c++ - 为什么 cin 不能像 cin.get 那样识别回车键?

c++ - 让本地符号走向全局

html - 如何在这 3 个水平元素之间留出空间

algorithm - 均匀分布点数

c++ - 通过变量值访问结构属性