判断&&剑指 Offer 20. 表示数值的字符串

本文探讨了如何使用C++解决数值字符串的验证问题,通过if-else结构简化判断逻辑,并介绍了有限状态自动机在解决此类问题中的应用,但最终选择了直接判断的解决方案。还提到了正则表达式的尝试,但因性能原因未采用。
摘要由CSDN通过智能技术生成

1.if-else判断(最简单做法,看大佬题解下面的力扣评论区一位老哥的做法,终于过了!!!

class Solution {
public:
    //几经曲折,什么有限状态自动机,什么正则表达式,都不如我直接判断更容易理解
    bool isNumber(string s) {
        if(s.length()==0)  return false;   //空
        bool isnum=false,isdot=false,ise=false;
        int index=0,fisrtstr=0,length=s.length();
        while(index<length && s[index]==' '){    //首空格
            index++;
        }
        fisrtstr=index;
        while(index<length){
            if(s[index]>='0'&&s[index]<='9')  isnum=true;
            else if(s[index]=='.'){
                if(isdot || ise)    return false;
                isdot=true;
            }
            else if(s[index]=='e' || s[index]=='E'){
                if(!isnum||ise) return false;
                ise=true;
                isnum=false;
            }
            else if(s[index]=='+' || s[index]=='-'){
                if(index!=fisrtstr && s[index-1]!='e' && s[index-1]!='E')   return false;
            }
            else if(s[index]==' ')  break;
            else return false;
            index++;
        }
        while(index<length && s[index]==' '){   //尾空格
            index++;
        }
        return isnum && index==length;
    }
};

2.有限状态自动机(思路理解了,因c++ map数组不会写而放弃这道题的解法

按照给出的规则,确定状态转移图,根据状态转移图编写代码。
参考大佬的解答和图:
面试题20. 表示数值的字符串(有限状态自动机,清晰图解)

3.虽然学习了正则表达式,正则表达式相当于一个DFA或者NFA,但是放这题用c++正则表达式求解超时了

 return regex_match(s,regex("\\s*[+-]?((\\d+)|(\\d*\\.\\d+)|(\\d+\\.\\d*))([eE][+-]?\\d+)?\\s*"));

学习正则表达式的时候参考了以下内容:
正则表达式 - 语法
正则表达式里的底层原理是什么
C++正则表达式
藏在正则表达式里的陷阱
一个由正则表达式引发的血案
关于正则表达式里含有空格的问题
正则表达式测试网站
力扣评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值