码迷,mamicode.com
首页 > 其他好文 > 详细

处理浮点数的状态机

时间:2015-08-13 23:35:29      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

这个问题来自于 leetcode 065: 

Valid Number

 

如果用正则表达式来写一个浮点数的解析,大概是这样的:

 

[+-]?(([0-9]+\.?) | (\.[0-9]))[0-9]*([eE][+-]?[0-9]+)?

我自己使用 dot 画了一个状态机出来:

 

技术分享

 

如果编写代码来模拟这个状态机,可以拆分为 “eE" 前后两部分分开处理; “eE” 前面的部分,还可以拆成 “.” 前后两部分(如果有点)来编写。

这道题目在 leetcode 上难度为 Hard,可以看出来这种不起眼的小细节,更能考验基本功。

 

------------------

由于字数限制,附上我话这个状态机使用的源码:

 1 digraph {
 2     graph [fontname = "Microsoft YaHei",fontsize=16 ranksep=1.0 splines=1 overlap=false size="16, 16" compound=true]
 3     edge [fontname = "Microsoft YaHei",fontsize=16]
 4     node [fontname = "Microsoft YaHei",fontsize=16 weight=2 rank=same width=1 rankdir=LR]
 5 
 6     p0[label="Start"]
 7     p2[label="Initial-Check"]
 8     p4[label="Dot-First"]
 9     p5[label="After-E"]
10     p6[label="After-E-Mark"]
11     p7[label="Almost-Done"]
12     p8[label="End"]
13     p9[label="Sign-Mark"]
14     pa[label="After-Dot"]
15 
16 
17     p0 -> p9[label="[+-]"]
18     p0 -> p9[label="blank-string"]
19 
20     p9 -> p4[label="``.‘‘"]
21     
22     p9 -> p2[label="[0-9]"]
23 
24     p2 -> p2[label="[0-9]"]
25     p2 -> pa[label="``.‘‘"]
26     p2 -> pa[label="blank-string"]    
27     p4 -> pa[label="[0-9]"]
28     pa -> pa[label="[0-9]"]
29     pa -> p8[label="$"]
30     pa -> p5[label="[Ee]"]
31     p5 -> p6[label="[+-]"]    
32     p5 -> p6[label="blank-string"]    
33     p6 -> p7[label="[0-9]"]
34     p7 -> p7[label="[0-9]"]    
35     p7 -> p8[label="$"]    
36 }

 

处理浮点数的状态机

标签:

原文地址:http://www.cnblogs.com/llhf/p/4728758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!