基本计算器输入验证算法

时间:2015-01-03 21:23:26

标签: algorithm validation parsing input calculator

我试图通过验证输入来改进我的Java计算器。 我的计算器可以处理+, - ,*,/,^和ofc()。 我试图找出验证输入有效的最佳方法。

有效输入如下所示:

10 + 2 + 2 * ( 5 + 6 )

无效输入如下所示:

10 $ 2 + 2 * ( 5 + 6 )

5 + 6 + (7 * )

你明白了。

2 个答案:

答案 0 :(得分:0)

一种用于检查输入语法和可选地评估表达式的简单标准算法是Dijkstra的shunting-yard algorithm,它专门用于评估这些表达式。它也可以选择修改以支持语法检查。

希望这有帮助!

答案 1 :(得分:0)

您正在寻找解析算法。我推荐两种方法之一:正则表达式或标记化。

Regex将是最简化的方法,java有很多Regex库。您可以形成正则表达式(正则表达式)以匹配有效的计算器输入。我不能为你提供一个很好的正则表达式,但我确信Google搜索会为你提供至少一个开始。正则表达式模式可以验证计算器输入,实质上是为您执行解析算法。

使用字符串标记器(假设字符串输入)对输入进行标记将需要解析算法。基本上,您将通过算法形成语法并检查令牌序列以匹配语法。例如:

Num - > operator | paren - > num - > ......诸如此类

我建议使用堆栈来跟踪括号。每当你遇到一个paren时,要么将一个占位符推入或从堆栈弹出。输入结束时的空堆栈意味着parens。左paren:推占位符;右边的paren:pop占位符。