【发布时间】:2017-12-09 08:24:25
【问题描述】:
我正在创建将中缀表达式作为输入的计算器应用程序,单击“=”按钮应用程序将求解表达式并在表达式无效的情况下给出结果或错误。
到目前为止,我已经设法使用堆栈和求解表达式将中缀转换为后缀,但它的局限性是它只需要一个数字作为操作数。
例子:
1+2(3*3)-4^2 //工作
11+2(13*3)-4^20 //不工作
1.2+2.4(10.5*.5)-4^2 //不工作
输入为字符串表达式,计算时必须遵循 BODMAS 规则,优先级相等的运算符必须从左到右计算。
谁能告诉我如何解决这个问题?我应该使用什么算法?处理不同边缘情况的最有效方法是什么?链接到一个工作示例。
【问题讨论】:
-
检查逆波兰表示法
-
标准解决方案是Shunting-yard algorithm。不过,您需要稍微修改一下以处理多于一位的数字。事实上,这看起来像你现在的问题。你可以处理
1+(3*3)-4^2,但是当数字有多个字符时你会失败。所以听起来你的问题是词法解析。但很难说,因为你没有发布任何代码,也没有给出任何描述,除了“不工作”。
标签: java android algorithm data-structures calculator