我需要检查std::string
是否为数字。按数字表示整数或带小数点的数字(基数为10)。
我对long long
提供的限制很好,所以除了我不关心的任何东西。我没有提升,但复制了lexical_cast
。
似乎要向double
投射以验证字符串是否确实有效,但我想知道是否存在我没想到的任何角落情况。
#include <typeinfo>
#include <sstream>
template<typename Out, typename In> static Out lexical_cast(In input)
{
stringstream ss;
ss << input;
Out r;
if ((ss >> r).fail() || !(ss >> std::ws).eof())
{
throw std::bad_cast();
}
return r;
}
bool is_numeric(const string in)
{
bool success = false;
try
{
lexical_cast<double>(in);
success = true;
}
catch(std::bad_cast &exc)
{
success = false;
}
return success;
}
修改 的
浮点数
我没有使用C ++ 0x / C ++ 11,所以我不能使用正则表达式来轻松验证浮点数。而且我正在尝试不必自己解析字符串,因为这意味着我必须进行更多的单元测试以确保我没有遗漏任何东西。
使用NaN我知道他们拥有属性float1 != float1
但是GCC搞砸了。