Validate if a given string is numeric.
Some examples:
“0” => true
” 0.1 ” => true
“abc” => false
“1 a” => false
“2e10” => true
刷了快一个小时,没有什么算法技巧,就是判断,要判断的临界条件太多了。代码表示的很清楚,直接看代码吧。
bool isNumber(char* s) {
int len = strlen(s);
if(len == 0) return false;
int i = 0;
while(s[i] == ' ' && i<len) i++;
if(s[i] == '\0') return false;
if(s[i] == '+' || s[i] == '-') i++;
bool e = false; //判断e或者E是否出现
bool dot = false;//判断.是否出现
bool first = false;//判断e之前是否有数字
bool second = false;//判断e之后是否有数字
bool space = false;//判断空格是否出现
while(s[i] != '\0'){
if(s[i] == '.'){
if(e || dot || space) return false;
else dot = true;
}else if(s[i] == ' ') {space = true;}
else if(s[i] == 'e' || s[i] == 'E'){
if(space || e || !first) return false;
else{
e = true;
}
}else if(s[i] >= '0' && s[i] <='9'){
if(space) return false;
if(!e) first = true;
else second = true;
}else if(s[i] == '+' || s[i] == '-'){
if(space) return false;
if(!e || !(s[i-1] == 'e' || s[i-1] == 'E')) return false;
}else return false;
i++;
}
if(!first) return false;
else if(e && !second) return false;
else return true;
}
是不是看了之后有点蒙,一定要小心各种临界条件。