c++ - 如何检查字符串输入是否为有效的 double 值?

标签 c++ string validation double

<分区>

这是我的代码。我正在创建一个接受字符串输入并将其转换为 double 的程序。但是,我需要验证输入是一个有效的 double 值。那我该怎么做呢?例如,3.14 有效,但 3.1.4、bob123 等无效。

namespace validInput
{
bool IsValidDouble(string inputString)
{
    int start = 0; // the index we will start looking for digits
    bool valid = true;  // assume valid for now
    int decCount = 0;

    // check for an empty string
    if (inputString.length() < 1)
    {
        valid = false; // no need to check anything else
    }        
    // next, check for a leading sign
    else if (inputString.at(0) == '-'|| inputString.at(0) == '+')
    {
        start = 1;  // start checking for digits after the sign

        // check that there's at least one character after the sign
        if (inputString.length() < 2)
        {        
        valid = false; // no need to check anything else
        }
    }
        // *****************************************
        // CHECK FOR ONLY ONE DECIMAL IN INPUT
        // *****************************************
    return valid; // return true if valid, false if not
}

// Taking string, validating, converting to float(decimal)
double TryDoubleInput()
{
    double dNumber;
    string inputString;

    //cin >> inputString;  // accept a string input
    getline(cin, inputString);
    if (!IsValidDouble(inputString)) 
    {
        cerr << "Invalid input. Please enter a number: ";
        dNumber = TryDoubleInput();
    }
    else
    {
        dNumber = atof(inputString.c_str()); // convert to an integer
    }
    return  dNumber;
}
}

最佳答案

您可以使用double strtod (const char* str, char** endptr) 成功时,该函数将转换后的 float 作为 double 类型的值返回。 如果无法执行有效转换,则该函数返回零 (0.0)。 如果正确值超出该类型的可表示值范围,则返回正数或负数 HUGE_VAL,并将 errno 设置为 ERANGE。

关于c++ - 如何检查字符串输入是否为有效的 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43038954/

相关文章:

java - String.format 返回使用逗号作为分隔符的 double 值

安卓 : Manually validating SSL Certificates

c# - 在 C# 项目中使用 C++ API

c++ - 我想制作一个没有任何可视对话框的程序

algorithm - 在大型数据集中查找最长公共(public)子串

javascript - 表单验证不验证密码

javascript - 使用 Javascript 验证输入

C++实例化

java - Java 泛型与 C++ 模板有何不同?为什么我不能使用 int 作为参数?

c++ - 将 uint64_t 转换为 std::string