水题
题意:
判断一个字符串是不是合法的数字.
思路:
题目本身对算法要求不大,问题是细节处理多得惊人.
说一下什么是合法的数字:
整数:123, -123, +123
标准的浮点数:12.3, -12.3, +12.3
科学的浮点数(底数可以浮点数,指数只能整数):1e5, 1.5e5, 1.5e-5, -1.5e5
头疼的浮点数: .3 , 3. , +.3 , -3.
刚开始以为用自动机比较简单,后来发现还是暴力做简单.
先去两边空格,然后判断非法字符(数字,e,+,-,小数点合法).
字符都合法后,先找e,有e就分成左边标准浮点右边整数判断,没e直接当成标准浮点判断,有多个e直接非法.
标准浮点判断先找小数点,有多个就非法,没就当成整数判断.刚好一个就分成两边整数判断,但这里不是整数这么简单.右边整数不能带正负号,左边整数可以带,并且可以就一个正负号.两个整数都可以为空,但不能同时为空.
整数判断,头可以是正负号,后面全是数字即可.要特判字符串为空,和只有一个字符并且是正负号.
另外,正则表达式怎么做(笑脸)?这样?
^[\+\-]?(\d+(\.\d*)?|\d*\.\d)(e[\+\-]?\d+)?$
总结:
科学浮点数=标准浮点数+e+整数,标准浮点数=整数+小数点+整数,具体实现需要特判很多细节.