TSOJ 1057 合法浮点数判断 – 字符串匹配 DFA(maybe)

  • 2019-03-09
  • 251
  • 0
  • 0

题目描述

请你判断,哪些是合法的浮点数

浮点数的表示通常有以下两种形式:

1) 十进制小数形式。由数字和小数点组成,必须有小数点,允许出现若干个前导零。例如(123.)(123.0)(.123)(00123.456)。

2) 指数形式。字母 e(或 E)之前必须有数字,允许出现若干个前导零,e 后面的指数必须为整数。例如(123e3)(00123e4)。

样例

分析

解法1 正则表达式

使用C++ regex 库可以实现

但问题是C++编译正则表达式的速度实在不快,实用性不高。

此题想正则表达式的时间和用DFA做实际上差不多。DFA(maybe)

解法2 DFA

看起来复杂 实际上很容易归纳

C++14  REQUIRED

很久之后的更新:

此题,我实际上是而为了用智能指针而用智能指针,花费了很多无用的努力,但是过程中也学到了很多东西。

这里使用 shared_ptr 实际上没有必要,而且如果自动机不是一个DAG的话,会出现内存泄露的问题。

智能指针是用来更智能地去管理动态分配内存的工具,用来处理引用关系或者指向的话实际上没有什么优势。使用裸指针也是可以的。

此代码为第二版本。第四版本已经解决上述问题,如下:

 

 

解法3 很多 if else

CC BY-NC-SA 4.0 本作品使用基于以下许可授权:Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

评论

还没有任何评论,你来说两句吧