我正在编写一个表达式计算程序,就像这个一样。我的问题是我不知道如何处理运算符的优先级。我使用递归来查找最内层的括号,并在找到后解决其中的表达式,就像这样:
Evaluate("2 + (3 * 5)")
将以这种方式重新调用自身:
Evaluate("3 * 5")
现在,由于没有括号,它会计算结果并再次调用自身:
Evaluate("2 + 15")
好的,返回值是17,跟预期一样。但如果我调用Evaluate("2 + 3 * 5")
,结果是:
Evaluate("2 + 3 * 5")
Evaluate("5 * 5")
这显然是错误的。
基本上我是从左到右解决操作的。我该如何选择必须先执行的操作?我想添加一些括号来围绕每个操作,但看起来不太好。
那么,我需要先解析整个表达式还是有其他方法?