表示数值的字符串

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M

题目描述

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

思路:

设立三个flag:sign,decimal,hasE,分别来标记符号位、小数点、e是否出现
本题涉及到的条件很多,比如第一次出现+-号,且不是在字符串开头,后面要紧跟e,不然,就不符合要求;所以一定要确定+-、.、e三者在本题中何种情况是符合条件的

class Solution {
public:
    bool isNumeric(char* string)
    {
        //标记符号 小数点 e是否出现
        bool sign = false,decimal = false,hasE = false;
        for(int i =0;i < strlen(string);i++)
        {
            if(string[i] == 'e' || string[i] == 'E')
            {
                if(i == strlen(string)-1) return false;
                if(hasE) return false;
                hasE = true;
            }
            else if(string[i] == '+' || string[i] == '-')
            {
                //第二次出现+-符号,则必须要紧贴e之后
                if(sign && string[i-1] != 'e' && string[i-1] != 'E')return false;
                //第一次出现+-符号,且不是在字符串开头,则也必须紧贴e之后
                if(!sign && i > 0 && string[i-1]!='e' && string[i-1] != 'E') return false;
                sign = true;
            }
            else if(string[i] == '.')
            {
                //e后面不能直接接小数点,小数点不能出现两次
                if(hasE || decimal) return false;
                decimal = true;
            }
            else if(string[i]<'0' || string[i]>'9')
                return false;
        }
        return true;
    }

};
原文地址:https://www.cnblogs.com/whiteBear/p/12656727.html