【发布时间】:2011-01-16 19:32:18
【问题描述】:
我正在做一个表情评估程序,就像this。我的问题是我不知道如何处理操作优先级。我使用递归来找到最里面的一对括号,并在找到后解决其中的表达式,如下所示:
Evaluate("2 + (3 * 5)")
将以这种方式重新调用自己:
Evaluate("3 * 5")
现在,由于没有括号,它计算结果并再次调用自己:
Evaluate("2 + 15")
好的,返回值是 17,正如预期的那样。但是如果我打电话给Evaluate("2 + 3 * 5"),结果是:
Evaluate("2 + 3 * 5")
Evaluate("5 * 5")
这显然是错误的。
基本上我正在从左到右解决操作。如何选择必须首先执行的操作?我想在每个操作周围添加几个括号,但看起来不太好。
那么,我需要先解析整个表达式吗?还有其他方法吗?
【问题讨论】:
标签: algorithm math evaluation vb5