码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode Valid Number

时间:2014-07-05 17:20:00      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   os   for   

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符号,数字四种可能,除了它们之外的字符,程序返回false。

  • 正负号:只能出现在第一个字符或者e后面,不能出现在最后一个字符
  • 小数点:字符串不能只含有小数点,也不能只含正负号和小数点,小数点不能在e或者小数点后
  • e:e不能出现在第一个字符,也不能出现在最后一个字符,e前面不能没有数字,也不能有e
class Solution {
public:
    bool isVaild(char c){
        if(c==+ || c==- || c == . || c==e || c>=0&& c <= 9) return true;
        else return false;
        
    }
    
    bool isNumber(const char *s) {
        string str(s);
        bool res = false;
        size_t pos = str.find_first_not_of(" ");
        if(pos!=string::npos) str=str.substr(pos);     //去掉前端空格
        else str="";
        pos = str.find_last_not_of(" ");
        str=str.substr(0,pos+1);  //去掉后端空格
        if(str == "") return res;
        bool hasSign = false, hasDot = false, hasExp = false, hasDigit = false;
        int len = str.length();
        for(int i = 0 ; i < len ;++ i){
            char ch = str[i];
            if(!isVaild(ch)) return false;
            switch(ch){
                case +:
                case -:
                    //不在第一个或者e后面;在最后一个字符
                    if((i!=0 && str[i-1]!=e) || i== len-1) return false;
                    else hasSign = true;
                    break;
                case .:
                    //只有一个字符的情况;只有符号和点;在e和点之后
                    if(len == 1 || (len == 2 && hasSign) || hasExp || hasDot) return false;
                    else hasDot = true;
                    break;
                case e:
                    //出现在第一个或最后一个;前面没有数字;前面有e
                    if(i == 0 || i == len-1 || !hasDigit || hasExp) return false;
                    else hasExp = true;
                    break;
                default:
                    hasDigit = true;
                    break;
            }
        }
        return true;
    }
};

 

Leetcode Valid Number,布布扣,bubuko.com

Leetcode Valid Number

标签:style   blog   color   strong   os   for   

原文地址:http://www.cnblogs.com/xiongqiangcs/p/3822944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!