【问题标题】:Cant get number input from string无法从字符串中获取数字输入
【发布时间】:2017-09-10 11:57:40
【问题描述】:

只是尝试使用代码块从字符串中获取数字。不知道代码块是否有问题,因为我听说使用 stoi 函数时出现问题。

只是尝试执行以下操作:

字符串输入;

cin>>input;// user defined such as input="he gave 6 apples " ( taking only one number no matter how big )



int a;
a=stoi(input);// will be 6

【问题讨论】:

    标签: c++ string input codeblocks


    【解决方案1】:

    首先,您可能无法使用cin 获取整行。这些空间令人不安。您应该改用getline()
    其次,我更喜欢使用int atoi(const char *)。 代码:

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    using namespace std;
    int myFunction(string s)
    {
        int i;
        for(i = 0; i < s.length(); i++)
            if(s[i] >= '0' && s[i] <= '9')
                break;
        return atoi(&(s[i]));
    }
    int main()
    {
        string s;
        getline(cin, s);
        int numFromLine = myFunction(s);
        cout << numFromLine << endl;
        return 0;
    }
    

    【讨论】:

    • 更喜欢使用字符文字而不是十进制 ASCII 代码。示例:“0”而不是 48。
    • 您对atoi 的使用只会返回一位转换后的数字。尝试使用std::istringstreamstd::getline
    • 另外,通过引用传递std::stringstring 是一个大对象,在制作副本并将其传递给函数时会占用大量空间。如果字符串未修改,首选const 引用。
    • 您可能希望将inFromLine 声明为const,因为它没有更改。 {很抱歉,我一直在使用静态分析工具和 MISRA。}
    • 不喜欢使用using namespace std。使用单独的 using 语句,例如 using std::cout 或为每个项目添加前缀,例如 std::string
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多