剑指offer——54/66表示数值的字符串

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

思路;把所有不合法的列举出来,剩下的就是合法的了!

class Solution {
public:
    bool isNumeric(char* string)
    {
        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)//不能是e后面没有数字
                     return false;
                 if(hasE)//不能出现两个e
                     return false;
                 hasE=true;
             }
            else if(string[i]=='+'||string[i]=='-')
            {
                if(sign&&string[i-1]!='e'&&string[i-1]!='E')//有+-出现,第二次出现必须在e之后
                    return false;
                if(!sign&&i>0&&string[i-1]!='e'&&string[i-1]!='E')//没有+-出现,第二次数显也必须在e之后
                    return false;
                sign=true;
            }
            else if(string[i]=='.')
            {
                if(hasE||decimal)//.只能出现一次,并且不能在e之后
                    return false;
                decimal=true;
            }
            else if(string[i]<'0'||string[i]>'9')//不合法的字符
                return false;
        }
         return true;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_17141957/article/details/81065479