【问题标题】:Basic calculator input validation algorithm基本计算器输入验证算法
【发布时间】:2015-01-03 21:23:26
【问题描述】:

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

有效的输入如下所示:

10 + 2 + 2 * ( 5 + 6 )

无效输入如下所示:

10 $ 2 + 2 * ( 5 + 6 )

5 + 6 + (7 * )

你明白了。

【问题讨论】:

  • 好吧,祝你好运:) - 有问题吗?

标签: algorithm validation parsing input calculator


【解决方案1】:

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

希望这会有所帮助!

【讨论】:

    【解决方案2】:

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

    Regex 将是最精简的方法,java 有大量的 Regex 库。您可以形成一个正则表达式 (Regex) 来匹配有效的计算器输入。我无法为您提供一个好的正则表达式,但我相信谷歌搜索至少可以为您提供一个开始。 Regex 模式可以验证计算器输入,本质上是为您执行解析算法。

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

    Num -> operator|paren -> num -> ......等等

    我建议使用堆栈来跟踪括号。每次遇到括号时,要么将占位符推入堆栈或从堆栈中弹出一个占位符。输入末尾的空堆栈意味着偶数括号。左括号:推占位符;右括号:弹出占位符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多