我整夜忙于寻找一种方法来确定我的字符串值是否为有效的double值,但我还没有找到一种方法也不会拒绝带有点的数字...

在搜索中,我发现了这个

How to determine if a string is a number with C++?

查尔斯· Solr 维亚(Charles Salvia)的回答是

bool is_number(const std::string& s)
{
std::string::const_iterator it = s.begin();
while (it != s.end() && std::isdigit(*it)) ++it;
return !s.empty() && it == s.end();
}

这适用于其中没有点的任何数字,但是带有点的数字将被拒绝...

最佳答案

您可以使用 strtod :

#include <cstdlib>

bool is_number(const std::string& s)
{
    char* end = nullptr;
    double val = strtod(s.c_str(), &end);
    return end != s.c_str() && *end == '\0' && val != HUGE_VAL;
}

您可能会喜欢这样使用 std::stod :
bool is_number(const std::string& s)
{
    try
    {
        std::stod(s);
    }
    catch(...)
    {
        return false;
    }
    return true;
}

但这可能效率很低,例如zero-cost exceptions

关于c++ - 如何验证字符串是否为有效的 double 型(即使其中有一个点)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29169153/

10-12 21:56