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

华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/13

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

解析:由于种类太多,题目的例子不一定能覆盖全部,就自己写吧。第一步在字符串中寻找最后一个出现的e或者E,然后根据E(e)将字符串分为e前的串和e后的串。只要判断e前的串是一个合格的浮点数,e后的是一个合格的整数即可。

class Solution {
public:
    bool isNumeric(char* string)
    {
        int length=strlen(string);
        int flag=length-1;
        while (flag>=0)
        {
            if((string[flag]=='E')||(string[flag]=='e'))
                break;
            else
                flag--;
        }
        if((flag==0)||(flag==length-1))
            return false;
        if(flag==-1)
            return isfloat(string);
        else
        {
            char* str1=new char[flag+1];
            char* str2=new char[length-flag];
            for(int i=0;i<length;i++)
            {
                if(i<flag)
                    str1[i]=string[i];
                if(i>flag)
                    str2[i-flag-1]=string[i];
            }
            str1[flag]='\0';
            str2[length-flag-1]='\0';
            return isfloat(str1)&&isint(str2);
        }
    }
    bool isfloat(char* str)
    {
        int pointcount=0;
        for(int i=1;i<strlen(str);i++)
        {
            if(str[i]=='.')
                pointcount++;
            else
                if((str[i]-'0'<0)||(str[i]-'0'>9))
                    return false;
        }
        if(pointcount>1)
            return false;
        else
            return true;
    }
    bool isint(char* str)
    {
        for(int i=1;i<strlen(str);i++)
        {
            if((str[i]-'0'<0)||(str[i]-'0'>9))
                return false;
        }
        return true;
    }
};

你可能感兴趣的:(剑指offer—表示数值的字符串)