65. Valid Number

来源:互联网 发布:旋流器计算软件 编辑:程序博客网 时间:2024/05/29 07:53

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.

这道题的要求是判断1个字符串是否是数字。

字符串处理,不过有几个细节需要注意:
先把前面和后面的空格全部剪掉,如果全空返回false。
数字可以有前导空格和后置空格,不过数字中间不允许有空格;
对于’.’,最多只允许出现1次,左右两边只能有一边没数字;
对于’e’,最多只允许出现1次,其前后都必须有数字,但后面一定是整数,即不能出现’.’;
对于’+’和’-‘,’e’的前后都最多只允许出现1次,且一定要在数字最前面出现;
至于其他字符,只允许是数字(0~9)。

#include<iostream>#include<string>using namespace std;class Solution {public:    bool isNumber(string s)     {        int i=0,j=s.length()-1;        while(s[i]==' ')            i++;        while(s[j]==' ')            j--;        if(j<i)            return false;        else            s=s.substr(i,j-i+1);        bool pointSeen = false;        bool eSeen = false;        bool numberSeen = false;        bool numberAfterE = true;        for(i=0; i<s.length(); i++)         {            if('0' <= s[i] && s[i] <= '9')             {                numberSeen = true;                numberAfterE = true;            }             else if(s[i] == '.')             {                if(eSeen || pointSeen)                 {                    return false;                }                pointSeen = true;            }             else if(s[i] == 'e')             {                if(eSeen || !numberSeen)                 {                    return false;                }                numberAfterE = false;                eSeen = true;            }             else if(s[i] == '-' || s[i] == '+')             {                if(i != 0 && s[i-1] != 'e')                 {                    return false;                }            }             else                 return false;    }    return numberSeen && numberAfterE;    }};int main(){    char s[10];    cin.getline(s,10);    Solution solve;    cout<<solve.isNumber(s)<<endl;    return 0;}
0 0
原创粉丝点击