C++ C++;检查字符串是否为数字
我需要检查C++ C++;检查字符串是否为数字,c++,lexical-cast,C++,Lexical Cast,我需要检查std::string是否是一个数字。我所说的数字是指整数或带小数点的数字(以10为基数) 我对long提供的任何超出我所不关心的限制都很满意。我没有boost,但是复制了词法\u cast 这似乎像是对double进行强制转换,以验证字符串是否确实有效,但我想知道是否有一些我没有想到的特殊情况 #include <typeinfo> #include <sstream> template<typename Out, typename In> st
std::string
是否是一个数字。我所说的数字是指整数或带小数点的数字(以10为基数)
我对long
提供的任何超出我所不关心的限制都很满意。我没有boost,但是复制了词法\u 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;
}
#包括
#包括
模板静态输出(输入中)
{
细流ss;
ss>r.fail()| |!(ss>>std::ws.eof())
{
抛出std::bad_cast();
}
返回r;
}
布尔是数字(常量字符串输入)
{
布尔成功=假;
尝试
{
词汇转换(in);
成功=真实;
}
捕捉(标准:错误的施法和换法)
{
成功=错误;
}
回归成功;
}
编辑 浮点数 我没有使用C++0x/C++11,因此无法使用正则表达式轻松验证浮点数。我尽量不必自己解析字符串,因为这意味着我必须进行更多的单元测试,以确保没有遗漏任何内容
对于NaN,我知道他们拥有属性
float1!=float1
但GCC会搞糟这一点。转换为double
可能会接受某些文本表示形式的无穷大或NaN。为什么要这么麻烦,而不是迭代字符串并检查它是否只包含数字,最多包含一个
(或小数点的其他表示形式)?和@NikBougalis的可能重复:仅数字,最多一个
,可能是一个+
或一个-
,也可能是一个e
或e
,然后是可选的另一个+
或-
和一些其他数字,但不是
。。。我忘了什么吗?@n.m.:那么你真的想确认这是一个F.P.号码?如果是这样,你已经复制了。