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
| class Solution { public: bool isNumber(string s) { int n = s.length(); bool num = false, numAfterE = false, dot = false, exp = false, sign = false; for (int i = 0; i < n; ++i) { char c = s[i]; if (c == ' ') { if ((num || dot || exp || sign) && i + 1 < n && s[i + 1] != ' ') return false; } else if (isdigit(c)) { num = numAfterE = true; } else if (c == '.') { if (dot || exp) return false; dot = true; } else if (c == 'e') { if (exp || !num) return false; exp = true; numAfterE = false; } else if (c == '+' || c == '-') { if (i > 0 && s[i - 1] != 'e' && s[i - 1] != ' ') return false; sign = true; } else return false; } return num && numAfterE; } };
|