417.有效数字

来源:互联网 发布:js 字符串转数组 编辑:程序博客网 时间:2024/04/30 23:23

给定一个字符串,验证其是否为数字。

样例

"0" => true

" 0.1 " => true

"abc" => false

"1 a" => false

"2e10" => true


还有这几种情况要考虑。例如: "1.0e10"是正确的, "1.0e1.0"是错误的,"   1"是正确的,"  1  1"是错的,“e”是错误的,".111"是正确的。

总结一下就是:

处理完空格和正负号后的第一个字符必须是数字或者是符号‘.’,

处理数字时遇到空格,那么空格必须一直到结束,

符号.必须出现在符号e之前。

class Solution {public:    /**     * @param s the string that represents a number     * @return whether the string is a valid number     */    bool isNumber(string& s) {        // Write your code here        int m = s.size();        int start = 0;        while(start<m && s[start] == ' ')//处理空格            start++;        if(start == m)//全是空格返回false            return false;                if(s[start] == '+' || s[start] == '-')//处理正负号            start++;        if(start ==m)            return false;                bool flagdian = false;//判断.是否已经出现        bool flagkong = false;//判断空格是否已经出现        bool flage = false;//判断e是否已经出现        if(s[start] == '.')//处理".111"这种情况        {            flagdian = true;            start++;        }        if(!(s[start] >= '0' && s[start]<='9'))//好了,现在的第一个字符必须是数字            return false;        while(start<m)        {            if(s[start] >= '0' && s[start]<='9')            {                start++;            }            else if(!flagkong && s[start] == ' ')//处理数字时遇到空格,那么空格必须一直到结束,            {                while(start<m && s[start] == ' ')                    start++;                if(start == m)                    return true;                else                    return false;            }            else if(!flage && !flagdian && s[start] == '.')//注意.必须出现在e之前。            {                start++;                flagdian = true;            }            else if(!flage && s[start] == 'e' )            {                start++;                flage = true;            }            else                return false;        }        return true;    }};

0 0
原创粉丝点击