在做了一些研究后,我了解了后缀表示法,以及如何解析表达式。
我的代码转换为后缀表示法,然后使用基于堆栈的方法对其进行评估。例如:
Initial expression: 5 + 2^(4 - 1)
Postfix notation: 5 2 4 1 - ^ +
Result: 13
现在我正在尝试扩展这个程序,以便能够使用函数来计算表达式,例如sin,cos,log,例如:5 + sin (2 + log (2))
。
在解析它之前,我最初的想法是找到这些函数,评估它们的结果,并在字符串中替换它。但我认为这不是一个好主意......
那么我怎么能以有效的方式做到这一点呢?
以下是用c#编写的一些代码,如果有任何用处:http://pastebin.com/7wB81fyQ,但我更喜欢一些伪代码,这样我才能理解我写得更好......我不是那些只是复制和粘贴的人。
答案 0 :(得分:1)
像处理任何其他操作符和大括号一样处理这些函数。首先计算大括号中的内容,然后执行函数。
Initial: 3 * Sin(4 + 5)
Postfix: 4 5 + Sin 3 * (that's how I would enter it in a HP calculator)
or: 3 4 5 + Sin *
除了使用两个数字的+
之外,Sin
只消耗一个数字。