实现一个函数判断字符串是否表示数值(包括整数和小数),如'+100', '5e2', '-1E-16'等
但'12e', '1a3.12', '+-9'都不是
整个扫描过程分为三部分
- 扫描整数部分
- 扫描小数部分(如果有)
3)扫描E|e 后面的部分(如果有)
bool scanUnsigned(const char** str)
{
const char* before = *str;
while(**str != '\0' && **str='0' && **str <= '9')
++(*str);
return *str>before;
}
bool scanInteger(const char** str)
{
if(**str == '+' || **str == '-')
++(*str);
return scanUnsigned(str);
}
bool isNumeric(const char* str)
{
if(str == NULL)
return false;
bool numeric = scanInteger(&str);
if(*str == '.')
{
++str;
//小数部分没有符号
// 用 || 的原因:小数前后可以有或没有数字,如3.,.3
numeric = scanUnsigned(&str) || numeric;
}
if(*str == 'e' || *str == 'E')
{
++str;
// e前面可能有符号
// 用 && 的原因:e前后必须都有数字,否则e3, 3e都不是数值
numeric = numeric && scanInteger(&str);
}
return numeric&&*str == '\0';
}
网友评论