LeetCode 65. 有效数字

65. 有效数字

验证给定的字符串是否为数字。

例如:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。

更新于 2015-02-10:
C++函数的形式已经更新了。如果你仍然看见你的函数接收 const char * 类型的参数,请点击重载按钮重置你的代码。


int my_type(char str){
    if(str >= '0' && str <= '9')return 1;
    else if(str == 'e')return 2;
    else if(str == '.')return 3;
    else if(str == '-')return 4;
    else if(str == '+')return 5;
    else if(str == ' ')return 0;
    else return -1;
}

bool isNumber(char* s) {
    int templen = strlen(s);
    int len = templen - 1;
    int ecount = 0;
    int dcount = 0;
    int flag = 0;
    int ans = 0;
    while(s[len] == ' '){
        len--;
    }
    
    for(int i = 0;i <= len;i++){
        if(my_type(s[i]) == 0){
            if(flag != 0){
                return false;
            }
        }
        else if(my_type(s[i]) == 1);
        else if(my_type(s[i]) == 2){
            if(ecount == 0  && (my_type(s[i - 1]) == 1) || (my_type(s[i - 1]) == 3)){
                if(my_type(s[i + 1]) == 1 || s[i + 1] == '+' || s[i + 1] == '-')
                    ecount++;
                else 
                    return false;
            }
            else
                return false;
        }
        else if(my_type(s[i]) == 3){
            if(dcount == 0 && (my_type(s[i + 1]) == 1 || my_type(s[i - 1]) == 1) && ecount == 0)
                dcount++;
            else
                return false;
        }
        else if(my_type(s[i]) == 4 || my_type(s[i]) == 5){
            if((flag == 0 || s[i - 1] == 'e') && (my_type(s[i + 1]) == 1) || s[i + 1] == '.');
            else
                return false;
        }
        else if(my_type(s[i]) == -1)
            return false;
        if(my_type(s[i]) != 0)
            flag = 1;
    }
    if(flag == 0)
        return false;
    return true;
}
这个代码写的太丑了,自己都看不下去。。。。但是真的过的很艰难,数据真的好坑。。
注意测试案例:e的后面是不可以有‘.’的,e的前面是要有‘.’或者数字的(e3.33   false)(3.e2  true)







































而且测试案例有正负号的,一开始忘了正号。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值