表示数值的字符串

你快乐吗?

Posted by bbkgl on September 27, 2019

愿我如星君如月

夜夜流光相皎洁

C++,字符串处理,这种题不难,就是繁琐,分两种情况讨论。

  1. 使用科学计数法,即有E/e字母:
    • E前面为小数或者整数,E后面只能为整数
    • 小数和整数前面可以出现一次+/-
    • 小数里边可以出现一次.符号
  2. 不适用科学计数法,没有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;
    }

};