题目:
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.
要写对这题着实不容易,很多细节需要考虑。先看看测试用例有哪些,然后再写就比较有针对性。最后看看哪些test case错了,再修一下bug。
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
class Solution
{ public: bool isNumber( const char *s) { // Start typing your C/C++ solution below // DO NOT write int main() function if (s == NULL) return false; while(isspace(*s)) s++; if (*s == '+' || *s == '-') s++; bool eAppear = false; bool dotAppear = false; bool firstPart = false; bool secondPart = false; bool spaceAppear = false; while(*s != '\0') { if (*s == '.') { if (dotAppear || eAppear || spaceAppear) return false; else dotAppear = true; } else if (*s == 'e' || *s == 'E') { if (eAppear || !firstPart || spaceAppear) return false; else eAppear = true; } else if (isdigit(*s)) { if (spaceAppear) return false; if (!eAppear) firstPart = true; else secondPart = true; } else if (*s == '+' || *s == '-') { if (spaceAppear) return false; if (!eAppear || !(*(s - 1) == 'e' || *(s - 1) == 'E')) return false; } else if (isspace(*s)) spaceAppear = true; else return false; s++; } if (!firstPart) return false; else if (eAppear && !secondPart) return false; else return true; } }; |