c ++检查字符串是否有效整数或小数(包括负面和正面情况)

时间:2015-10-14 14:33:43

标签: c++ regex numbers decimal

如何检查字符串是否为有效数字?

string n1 = "0.23"; //Valid
string n2 = "123"; //Valid
string n3 = "-77"; //Valid
string n4 = "-0.73"; //Valid
string n5 = "345.567"; //Valid
string e6 = "+67"; //Invalid
string e7 = "a34"; //Invalid
string e8 = ".56"; //Invalid
string e9 = "15."; //Invalid
string e10 = "15-16"; //Invalid
string e11 = ".7-53"; //Invalid

我尝试过这个功能:

bool is_digits(const std::string &str){
    return str.find_first_not_of("0123456789.-") == std::string::npos;
}

但很明显,即使我将最后两个无效的例子作为参数传递,它也会返回true

string e8 = ".56"; //Invalid
string e9 = "15." //Invalid

1 个答案:

答案 0 :(得分:0)

答案是一个简单的正则表达式:

bool regexmatch(string s){

    regex e ("[-+]?([0-9]*\.[0-9]+|[0-9]+)");

    if (regex_match (s,e))
        return true;

    return false;
}

它将按预期在整数(即56,-34)和浮点数(即6.78,-34.23,0.6)上返回true。