[剑指Offer]:表示数值的字符串

107 阅读1分钟

文章目录


题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。

示例1:

输入
"123.45e+6"

返回值
true

示例2:

输入
"1.2.3"

返回值
false

思路:

首先要想到所有的情况,然后进行分类讨论。-123.45e-67

  • ± 号后面必定为数字或后面为.(-.123 = -0.123)
  • ± 号只出现在第一位或在eE的后一位
  • . 后面必定为数字或为最后一位(233. = 233.0)
  • eE 后面必定为数字或±号

代码实现:

class Solution {
public:
    bool isNumeric(char* str)
    {
        if(str == nullptr) return false;
        
        if(*str == '+' || *str == '-') ++str;
        if(*str == '\0') return false;
        
        int dot = 0, e = 0;
        while(*str != '\0'){
            if(*str >= '0' && *str <= '9'){
                ++str;
            }
            else if(*str == '.'){
                if(dot != 0 || e != 0) return false;
                ++str;
                dot = 1;
            }
            else if(*str == 'e' || *str == 'E'){
                if(e != 0) return false;
                ++str;
                e = 1;
                if(*str == '+' || *str == '-') str++;
                if(*str == '\0') return false;
            }
            else return false;
        }
        return true;
    }
};