如何仅使用std :: string从字符串中获取数字?

时间:2018-01-21 20:09:09

标签: c++ string c++11

我有一个接受两个字符串的函数,“第一个”和“第二个” 我想检查第二个字符串是否采用以下格式: “first”_number,所以我可以重新调整第二个字符串中的数字

例如,如果第一个字符串是hello 第二个字符串是hello_7,然后我想返回7 .. 如果字符串不是这种格式,我返回0 ..

任何帮助?我只能使用字符串标准..如果没有别的方式,那么我可以使用其他标准函数。

int Plain::getNumber(string first, string second){
    std::size_t pos = second.find("_");
    std::string str1 = str.substr (0,pos);
    if(str1  ==  first){
    // here i want to get the number
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

更新代码以检查输入错误...

int Plain::getNumber(string first, string second){   //"hello" and "hello_7"

    string matchPattern = first + "_";     // "hello_"

    std::size_t pos = second.find(matchPattern); // find "hello_" within "hello_7"
    if (pos != 0) {   // validate that it's at the beginning
        return 0;     // not a match
    }

    string postFix = second.substr(matchPattern.size());

    return (int)strtol(postFix.c_str(), nullptr, 10);
    return result;
}

答案 1 :(得分:0)

如果您不介意使用C ++ 11,可以使用std :: stoi

std::string someString = "23123"; int parsedNumber = std::stoi(someString);

否则,请使用atoi: std::string someString = "23123"; int parsedNumber = atoi(someString.c_str());