Valid Number

来源:互联网 发布:淘宝店面装修图片素材 编辑:程序博客网 时间:2024/05/23 22:34
class Solution {public:    //return the offset of . from start, if not float, return -1;    int isFloat(int start,int end,const char* s)    {        //float at least contains a . and a number        if(start>=end)        {            return -1;        }        if((s[start]=='+')||(s[start]=='-'))        {            start++;        }        if(start>=end)        {            return -1;        }        int dotPos=-1;        for(int i=start;i<=end;++i)        {            if(s[i]=='.')            {                if(dotPos==-1)                {                    dotPos=i;                }                else                {                    return -1;                }            }            else if((s[i]<'0')||(s[i]>'9'))            {                return -1;            }            else            {                continue;            }        }        //calc offset        if(dotPos!=-1)        {            dotPos=dotPos-start;        }        return dotPos;    }    bool isInteger(int start,int end,const char* s)    {        if(start>end)        {            return false;        }        if(s[start]=='+'||s[start]=='-')        {            start++;        }        if(start>end)        {            return false;        }        for(int i=start;i<=end;++i)        {            if((s[i]<'0')||(s[i]>'9'))            {                return false;            }        }        return true;    }    bool isNumber(const char *s) {        int len=strlen(s);        //left trim        int start=0;        for(;start<len;++start)        {            if(s[start]==' ')            {                continue;            }            else            {                break;            }        }        //right trim        int end=len-1;        for(;end>=0;--end)        {            if(s[end]==' ')            {                continue;            }            else            {                break;            }        }        if(start>end)        {            return false;        }        //find the pos of e(E) if it is exist,before e is a integer or float,after e is a integer        int ePos=-1;        for(int i=start;i<=end;++i)        {            if((s[i]=='e')||(s[i]=='E'))            {                ePos=i;                break;            }        }        if(ePos==-1)        {            if(isInteger(start,end,s))            {                return true;            }            if(isFloat(start,end,s)!=-1)            {                return true;            }            return false;        }        else        {            if(isInteger(ePos+1,end,s))            {                if(isInteger(start,ePos-1,s))                {                    return true;                }                int pos=isFloat(start,ePos-1,s);                if(pos!=-1)                {                    return true;                }            }            return false;        }    }};


题目本身不难,只要细心处理好逻辑判断就好。首先要把最前面和最后面的空白去掉,然后判断是否是用科学计数法表示的,如果不是,直接判断是否为整数或者浮点数;如果是用科学计数法表示的,则e后边必须为整数,e前边为整数或浮点数。

0 0