input只能输入数字和小数点_leetcode 65 有效数字(c++)

beb6ea93c8144211e082959fb446f974.png

### 题目

验证给定的字符串是否可以解释为十进制数字。

例如:

"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3 " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false### 思路

上面的例子覆盖不完全,总结起来应该是这样的,字符串中只有一个e或者没有e,并且e前后字符串判断规则不一样,前面字符串中可以存在小数点,但是只能有一个,正负号必须在第一位,并且必须有数字,后面不能存在小数点,也必须有数字,正负号必须在第一位。

又是0ms,不错不错。

07dbea912ca0774711bc6d26953e6030.png

### code

class 

###思路

有限状态机。网上看的大佬的思路然后写的。

通过题意知道输入字符一共有六种:

  • 非法输入
  • 空格
  • 正负号
  • 小数点
  • 数字
  • e/E

一共九种状态,其中1、4、7、8合法。

  • 空格(只有空格或者空白,以下八种前面可以有任意数量空格)
  • 数(不含小数点的数,可以含正负号)
  • 点(可以含正负号)
  • 正/负号(只有正负号)
  • 点+数(在1基础上含小数点的数)
  • ...+e/E(前面合法+e/E)
  • ...+e/E+正/负号(前面合法+e/E+正负号)
  • ...+e/E+数(此处的数同1,不能有小数点)
  • 合法+空格(末尾可以有任意数量空格)

设置矩阵transTable代表每种状态下输入某个字符会转换到哪种状态,其中-1代表非法状态,1,4,7,8合法,其它暂时不确定。

###code

class 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值