在C++中如何判断一个字符串是数值,有许多方法。
有些方法利用输出流对象,效率很低。
也有用_ttof(str)函数,它将字符串str转换成double类型的数。如果其参数str不是一个数,则返回0。但如果str是字符串"0",也返回0。这就出现了歧义。
目前出现了一个新的系统函数解决了这个问题。这个函数的声明是:
int sscanf_s( const char *buffer, const char *format [, argument ] ... );
此函数的主要作用是将字符串buffer按规定的格式转换为数。但它有个重要的改进就是它的返回值,如果转换失败就返回0。这样如果函数返回0,就可以确认buffer不是一个数。
因此我们可以定义下面的函数来判断一个字符串是否是一个数:
bool IsNumber(const char *str)
{
double aa;
int nn = sscanf_s(str, "%lf", &aa);
return nn != 0;
}
在判断出一个字符串是数值后,再用_ttof(str)函数将字符串转换成数就比较方便了:
if (IsNumber(str)) a = _ttof(str);