
Valid_Number.png
size_t parse_sign(char *s, size_t start) { return (s[start] == '+' || s[start] == '-') ? start + 1 : start; }
size_t parse_digits(char *s, size_t start) {
size_t n = strlen(s), i = start;
while (i < n && isdigit(s[i])) I++;
return I;
}
bool isNumber(char * s){
size_t start = 0, n = strlen(s);
start = parse_sign(s, start);
if (start == n || (s[start] != '.' && !isdigit(s[start]))) return false;
bool dp = s[start] == '.';
if (dp) { start++; }
if (start == n || !isdigit(s[start])) return false;
start = parse_digits(s, start);
if (start == n) return true;
if (dp && s[start] == '.') return false;
if (s[start] == '.') {
dp = true;
start++;
if (start == n) { return true; }//4.
}
if (start == n) return false;
bool e = (s[start] == 'e' || s[start] == 'E');
if (e) {
start++;
start = parse_sign(s, start);
}
if (start == n || !isdigit(s[start])) return false;
start = parse_digits(s, start);
if (start == n) return true;
if (e && (e = (s[start] == 'e' || s[start] == 'E'))) return false;
if (s[start] == 'e' || s[start] == 'E') {
start++;
start = parse_sign(s, start);
}
if (start == n || !isdigit(s[start])) return false;
start = parse_digits(s, start);
return start == n;
}
网友评论