Valid Number

Validate if a given string is numeric.

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

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

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

正负号:只出现在第一个字符或e的后面一个字符;

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

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

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

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;
        
    }
};

 

posted @ 2014-07-10 23:03  Awy  阅读(320)  评论(0编辑  收藏  举报