File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ #include < bits/stdc++.h>
2+ using namespace std ;
3+
4+ class ValidNumber {
5+ public:
6+ bool isNumber (string s) {
7+ int n = s.size ();
8+ int i = 0 ;
9+
10+ // Remove leading whitespaces
11+ while (i < n && s[i] == ' ' ) i++;
12+
13+ // Remove trailing whitespaces
14+ int j = n - 1 ;
15+ while (j >= 0 && s[j] == ' ' ) j--;
16+
17+ if (i > j) return false ;
18+
19+ bool num = false ; // At least one digit before e
20+ bool dot = false ; // Only one '.'
21+ bool exp = false ; // Only one 'e' or 'E'
22+
23+ for (int k = i; k <= j; k++) {
24+ char c = s[k];
25+
26+ if (isdigit (c)) {
27+ num = true ;
28+ }
29+ else if (c == ' .' ) {
30+ // Only one '.' and it can't appear after e
31+ if (dot || exp) return false ;
32+ dot = true ;
33+ }
34+ else if (c == ' e' || c == ' E' ) {
35+ // e must appear only once and must follow a number
36+ if (exp || !num) return false ;
37+ exp = true ;
38+ num = false ; // Reset, we need digits after e
39+ }
40+ else if (c == ' +' || c == ' -' ) {
41+ // Sign must be at start or immediately after e
42+ if (k != i && s[k-1 ] != ' e' && s[k-1 ] != ' E' )
43+ return false ;
44+ }
45+ else {
46+ return false ;
47+ }
48+ }
49+
50+ return num;
51+ }
52+ };
You can’t perform that action at this time.
0 commit comments