请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路;把所有不合法的列举出来,剩下的就是合法的了!
class Solution {
public:
bool isNumeric(char* string)
{
bool sign=false,decimal=false,hasE=false;
for(int i=0;i<strlen(string);i++)
{
if(string[i]=='e'||string[i]=='E')
{
if(i==strlen(string)-1)//不能是e后面没有数字
return false;
if(hasE)//不能出现两个e
return false;
hasE=true;
}
else if(string[i]=='+'||string[i]=='-')
{
if(sign&&string[i-1]!='e'&&string[i-1]!='E')//有+-出现,第二次出现必须在e之后
return false;
if(!sign&&i>0&&string[i-1]!='e'&&string[i-1]!='E')//没有+-出现,第二次数显也必须在e之后
return false;
sign=true;
}
else if(string[i]=='.')
{
if(hasE||decimal)//.只能出现一次,并且不能在e之后
return false;
decimal=true;
}
else if(string[i]<'0'||string[i]>'9')//不合法的字符
return false;
}
return true;
}
};