题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路:
首先必须知道这些表示法的规则:
表示数值的字符串遵循模式A[.[B]] [e|EC]或者.B[e|EC]
其中A为数值的整数部分,B紧跟着小数点为数值的小数部分,C紧跟着'e'或者‘E’为数值的指数部分。
1、在小数里可能没有数值的整数部分。例如.123等于0.123,因此A不是必须的
但是如果没有整数部分,但小数部分一定不能为空。
2、A和C都是可能以‘+’或者‘-’开头的0~9的数位串,B也可能是 0~9的数位串,但前面不能有正负号
举例子:
123.45e+6,"123"是它的整数部分A,“45”是它的小数部分B,"+6"是它的指数部分C
步骤:
先扫描字符串的整数部分
再扫描 . 之后的小数部分
代码:
class Solution {
public:
bool isNumeric(char* string)
{
if(string==NULL)
return false;
if(*string=='\0')
return false;
if(*string=='+'||*string=='-')
string++;
int flag=0,nume=0,num=0;//分别表示小数点,e,整数的数目
while(*string!='\0')
{
if(*string>='0'&&*string<='9')
{ num++;
string++;
}
else if(*string=='.')
{
if(flag>0||nume>0)
return false;
flag++;
string++;
}
else if(*string=='e'||*string=='E')
{
if(nume>0||num==0)
return false;
nume++;
string++;
if(*string=='+'||*string=='-')
string++;
if(*string=='\0')
return false;
}
else return false;
}
return true;
}
};