我整夜忙于寻找一种方法来确定我的字符串值是否为有效的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/