表示数值的字符串

题目描述

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

代码

class Solution {
public:
    bool isNumeric(char* string)
    {
        if (!string[0]) {
            return false;
        }
        int i = 0;
        if (string[i] == '-' || string[i] == '+') {//符号位
            ++i;
        }
        //e前面的数字
        int e1 = i;//数字起始位置
        int e2 = -1;//小数点的位置
        while (string[i]) {
            if (string[i] == 'E' || string[i] == 'e') {
                break;
            }
            if (string[i] == '.') {
                if (e2 != -1) {//多个小数点或者第一个就是小数点
                    return false;
                }
                e2 = i;
            } else if (string[i] < '0' || string[i] > '9') {
                return false;
            }
            ++i;
        }
        
        if (string[i]) {//存在指数部分
            if (i > e1) {//e前面有数字
                ++i;
                if (string[i]) {
                    //看e后面是否合格
                    if (string[i] == '-' || string[i] == '+') {//符号位
                        ++i;
                    }
                    while (string[i]) {
                        if (string[i] < '0' || string[i] > '9') {
                            return false;
                        }
                        ++i;
                    }
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } 
        return true;
    }

};
原文地址:https://www.cnblogs.com/jecyhw/p/6601594.html