愿我如星君如月
夜夜流光相皎洁
C++,字符串处理,这种题不难,就是繁琐,分两种情况讨论。
- 使用科学计数法,即有
E/e
字母:- E前面为小数或者整数,E后面只能为整数
- 小数和整数前面可以出现一次
+/-
- 小数里边可以出现一次
.
符号
- 不适用科学计数法,没有E字母:
- 可以出现一次
.
符号 - 前面可以出现一次
+/-
- 其他情况下字符只能是
0-9
- 可以出现一次
代码如下:
class Solution {
public:
bool isNumeric(char* string) {
if (*string == '+' || *string == '-') string++;
char *e = string;
while (*e && *e != 'e' && *e != 'E') e++;
char *end = string;
while (*end != '\0') end++;
if (*e) {
if (*(e + 1) == '+' || *(e + 1) == '-')
return is_float(string, e) && is_int(e + 2, end);
else
return is_float(string, e) && is_int(e + 1, end);
} else
return is_float(string, end);
}
bool is_int(char *left, char *right) {
if (left == right) return false;
for (char *p = left; p != right; p++) {
if (*p < '0' || *p > '9')
return false;
}
return true;
}
bool is_float(char *left, char *right) {
int cnt = 0;
for (char *p = left; p != right; p++) {
if (*p == '.')
cnt++;
else if (*p < '0' || *p > '9')
return false;
if (cnt > 1)
return false;
}
return true;
}
};