Validate if a given string is numeric.
Some examples:"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
思路:这道题就是思考各种情况,我提交的时候漏过8种非法的数字,才AC了。
class Solution { public: bool isNumber(const char *s) { int len = strlen(s); int i,j,k; int point = 0; int science = 0; int co = 0; for(i=0; i<len; ++i) { if(s[i] != ' ') { if (s[i] == '+' || s[i] == '-') { ++i; } break; } } if (i == len) { return false; } for(; i<len; ++i) { if (s[i] != '.' && s[i] != 'e' && (s[i]-'0'>9 || s[i] -'0'<0) && s[i] != ' ') { return false; } else if(s[i] == ' ') { for(k=i+1; k<len; ++k) { if(s[k] != ' ') { return false; } } } else { if (s[i] == '.') { point++; if (science > 0) { return false; } if (i-1>=0 && s[i-1]-'0'>=0 && s[i-1]-'0'<=9) { co++; } if (i+1<len && s[i+1]-'0'>=0 && s[i+1]-'0'<=9) { co++; } if (co == 0) { return false; } } else if (s[i] == 'e') { science++; if (i+1 >= len || i-1 < 0) { return false; } if ((s[i+1]-'0'<0 || s[i+1]-'0'>9) && s[i+1]!='+' && s[i+1]!='-') { return false; } if (s[i+1] == '+' || s[i+1] == '-') { if (i+2 >= len) { return false; } if (s[i+2]-'0'>9 || s[i+2]-'0'<0) { return false; } i += 2; continue; } if (s[i-1]!='.' && (s[i-1]-'0'<0 || s[i-1]-'0'>9)) { return false; } } if(point >= 2 || science >= 2) { return false; } } } return true; } };