表示数值的字符串【排除法】

表示数值的字符串

http://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2

没有那么复杂,只是一个排除法的问题:
(1)+,-只能放在首位或者E,e的后面
(2)E或e,以及小数点只能出现一次,并且:在有E或者e的情况下,小数点不能在E,e后面出现
(3)不能有除了数字,E,e,小数点,+,-之外的其他字符出现
(4)e或E后面必须出现数字,如果后面是+或-,continue,继续判单有没有数字,直到找到为止。
(5)不能是空符号串
代码如下:

class Solution {
public:
    bool isNumeric(char* string)
    {
        int n=strlen(string);
        int cnt1=0,cnt2=0,pos1=0,pos2=0,cnt3=0,pos3=0;
        if(n==0) return false;
        for(int i=0;i<n;i++){
            if(string[i]!='e' && string[i]!='E'&&!(string[i]>='0'&&string[i]<='9')&&string[i]!='.'&&string[i]!='+'&&string[i]!='-')
                return false;
            if(string[i]=='.') cnt1++,pos1=i;
            if(string[i]=='e'||string[i]=='E') cnt2++,pos2=i;
            if(string[i]=='+'||string[i]=='-') cnt3++,pos3=i;
        }
        if(cnt2>=2||cnt1>=2||cnt3>=3) return false;
        if(pos1>pos2&&cnt2!=0)return false;

        if(string[0]=='+'||string[0]=='-') cnt3--;
        if(cnt2&&(string[pos2+1]=='+'||string[pos2+1]=='-')) cnt3--;
        if(cnt3) return false;

        if(cnt2){
            int flag=0;
            for(int i=pos2+1;i<n;i++){
                if(string[i]=='+'||string[i]=='-') continue;
                if(string[i]>='0'&& string[i]<='9'){
                    flag=1;
                    break;
                } 
            }
            if(!flag) return false;
         }
        return true;
    }

};
全部评论
123.e3应该也不能表示数值吧
1 回复 分享
发布于 2021-01-29 20:01
感谢
点赞 回复 分享
发布于 2020-12-17 10:11
感谢!这个题解对萌新及其友好!
点赞 回复 分享
发布于 2020-05-30 14:54

相关推荐

06-25 16:25
梧州学院 Java
愿汐_:项目介绍那么长,然而你做了啥就一句话?
点赞 评论 收藏
分享
评论
11
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务