Valid Number

Validate if a given string is numeric.git

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => trueui

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.spa

思路:本题须要讨论四种状况——数字、e、'.'、正负号.code

正负号:只出如今第一个字符或e的后面一个字符;blog

小数点:字符串中不能只存在小数点,也不能只含小数点和正负号,小数点不能在e后rem

e:不能出如今第一个字符或最后一个字符,e前面不能没有数字。字符串

在处理以前,先把头尾的空格去掉,而后在进行数字、e、'.'、正负号的判断。string

class Solution {
public:
    bool isNumber(const char *s) {
        if(strlen(s)<=0)
            return true;
        while(*s==' ')
            s++;
        const char *pEnd=s+strlen(s)-1;
        while(*pEnd==' ')
            pEnd--;
        if(*s=='+'||*s=='-')
            s++;
        const char *pBeg=s;
        int digit=0;
        int point=0;
        int e=0;
        while(*pBeg!='\0'&&pBeg<=pEnd)
        {
            if(isdigit(*pBeg))
            {
                pBeg++;
                digit++;
            }
            else if(*pBeg=='.'&&e==0)
            {
                pBeg++;
                point++;
            }
            else if(*pBeg=='e'&&pBeg!=s&&digit>=1)
            {
                if(isdigit(*(pBeg+1)))
                {
                    pBeg=pBeg+2;
                    e++;
                }
                else if((pBeg+2<=pEnd)&&(*(pBeg+1)=='+'||*(pBeg+1)=='-'))
                {
                    pBeg=pBeg+2;
                    e++;
                }
                else
                    return false;
            }
            else
                return false;
        }
        if(digit>=1&&e<=1&&point<=1)
            return true;
        else
            return false;
        
    }
};
相关文章
相关标签/搜索