本题源自leetcoide
--------------------------------------------
思路1:
去除空字符。然后先判断是否为+ 或者 - 然后在判断是否有小数点,再看是否为科学计数法。
1 小数点最多有1 位,
3 e 只能出现在小数点之后切e 后的数字只能是整数。
2 + - 可以出现在首字符或者e 后面的首字符
代码 :
bool isNumber(const char *s) {
while(*s==' ')
s++;
if(*s=='+'||*s=='-')
s++;
int pointNum=0;
int num=0;
while(*s>='0' && *s<='9' || *s=='.'){
*s=='.' ? pointNum++:num++;
s++;
}
if(num<1||pointNum>1) // 如果小数点的数目大于1 或者数字为0 则不是数字
return false;
if(*s=='e'||*s=='E'){ //科学计数法
s++;
if(*s=='+'||*s=='-'){
s++;
}
int eNum=0; // e 后面数字
while(*s>='0'&&*s<='9'){
eNum++;
s++;
}
if(eNum==0)
return false;
}
while( *s==' '){
s++;
}
return *s=='\0';
}
代码2 正则表达
public boolean isNumber(String s) {
return s.matches("(\\s)*([+-])?(([0-9]*\\.)?([0-9]+)|([0-9]+)(\\.[0-9]*)?)([eE][\\+-]?[0-9]+)?(\\s)*");
}