【问题标题】:Changing C++ cin更改 C++ cin
【发布时间】:2010-11-03 04:25:39
【问题描述】:

当你在输入cin时输入一个空格'',它将把空格前的第一个字符串作为第一个值,后面的作为下一个值。

假设我们有这段代码:

cout << "Enter your Name";
cin >> name;

cout << "Enter your age";
cin >> age;

现在,假设用户输入“John Bill”。

他的名字应该是约翰,他的年龄应该是比尔。

有没有办法:

  1. 是否让行自动将其从“”更改为“_”?

  2. 是否让它将该行读取为该行并将空格“ ”读取为普通字符?

【问题讨论】:

    标签: c++ cin


    【解决方案1】:

    在 C++ 中读取一行:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        cout << "Enter some stuff: " ;
        string line;
        getline( cin, line );
        cout << "You entered: " << line << endl;
    }
    

    【讨论】:

    • 无需调用字符串头文件/库。最好使用 char 数组,或者更好的是 char* 来完成这项工作。
    • 错误 - 超出此评论框的范围。
    • 无用的评论,因为它没有任何好处。如果你想告诉全世界我错了,请指出我错的原因。
    • 哦,走开。在你的路上想想你如何将一串字符(比如说长度为 100)读入一个 char *(在大多数平台上长度为 4)。
    • 通过告诉我“走开”——这更糟糕——争论和讨论比诽谤和无知更有益。即使我的论点不正确。
    【解决方案2】:

    你想使用 cin.getline() 可以这样使用:

    cin.getline(name, 9999, '\n');
    

    并且将包含最多换行符或 9999 个字符的所有内容。但这仅适用于 c 样式的 char 数组。

    getline(cin, name, '\n');
    

    适用于 std::strings。

    如果您想用下划线替换空格,您将不得不手动执行此操作。假设您使用的是 std::string ,您可以创建这样的函数:

    void replace_space(std::string &theString)
    {
        std::size_t found = theString.find(" ");
        while(found != string::npos)
        {
            theString[found] = '_';
            found = theString.find(" ", found+1);
        }
    }
    

    【讨论】:

    • 或 std::replace(theString.begin(), theString.end(), ' ', '_');
    【解决方案3】:

    当您执行“cin >>”时,您调用 cin.get 时默认设置了 ios::skipws 标志。显式调用 cin.get 使其包含空格。

    cin.get(name, strlen(name))
    

    来源: http://minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm

    【讨论】:

    • 您引用的页面应该被关闭,以免对学习程序员造成危险。甚至它也不提倡你提供的代码。
    • 我浏览了该页面,这似乎是对我的一个很好解释的参考。你能否说得更清楚一些,以便其他人了解看似准确的页面中的危险?
    【解决方案4】:

    我建议使用 std::string 因为它更安全。 使用 char * + 通过 malloc 分配内存是危险的,必须检查分配。但是,您应该查看此链接以获取有关其他何时有益的更多信息https://stackoverflow.com/a/6117751/1669631

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 2011-02-04
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 2012-11-27
      • 1970-01-01
      相关资源
      最近更新 更多