题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
思路:
其中有一个E数要注意,aEb=a*10^b.注意不能aE,大树可Ea=1Ea
按照数字组成:先正负。然后再数字/e,如果是数字,就乘以十加上,然后往后走,如果是e,判断后面正负+数字,注意有小数点。
(+/-,\0,0~9,. (个数和只能出现再e前),e/E前不能为零,后不能没有数
遇到这种先写测试用例:+,+.1 ,0e , e1.2 , e+e,e’\0’, 1…e , e+
代码:
class Solution {
public:
bool isNumeric(char* string) //只是巍峨了
{
if(string ==nullptr)
return false;
if(*string =='+' ||*string=='-')
string++;
if(*string =='\0') //只有一个正负号
return false;
int dot=0,num=0,numofe=0;
while(*string!='\0')
{//第一步 数字?e?小数点,不同处理方式。
if(*string>='0' &&*stirng<='9')
{
string++;
num=1;
}
else if(*string=='.')
{//是点了
if(dot>0 ||numofe>0) //最多一个点。且如果有e,e后面不能是小数点
return false;
string++;
dot++;
} //来e了
else if(*string==‘e' ||*string=='E')
{ //e的规则:前面不能为零,后面不能有小数点只能有一个小数点
if(num==0 || numofe>0)
return false;
string++;
if(*string=='\0')
return false; //e后面不能没有
if(*string =='+'|| *string=='-') //加号后面也可能没有。
{
string++;
if(*string=='\0')
return false;
}
}
else
return false; //出现其他字符
}
return true; //上述是直到’\0‘退出循环
}
}