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

来源:互联网 发布:狼雨seo官网 编辑:程序博客网 时间:2024/06/05 07:15

华电北风吹
天津大学认知计算与应用重点实验室
日期: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;    }};
0 0
原创粉丝点击