数字类型的操作'列表根据参数

时间:2015-09-04 04:54:22

标签: c++ parsing operators

我有一个函数,它将操作数列表(float, int..etc)和另一个枚举列表{ADD, SUBTRACT, DIVIDE, MULTIPLY}作为参数。我希望函数做的是获取它们并形成它的表达式。

例如,假设我传递了操作数list<int> {2, 5, 6, 2}和枚举列表{MULTIPLY, ADD, DIVIDE}。我希望该函数以某种方式生成并计算此maintaining the order of operations之外的表达式。

在这种情况下,表达式为2*5+6/2,评估为13

Add(x,y) Subtract(x,y) Multiply(x,y) Divide(x,y)

功能不会起作用,因为它最终会破坏操作的顺序。我不想自己编写优先级表,我知道C ++运算符确实已经设置了优先级。有没有办法可以利用它?

2 个答案:

答案 0 :(得分:1)

您可以使用Shunting-Yard算法将中缀表达式转换为反向波兰表示法中的堆栈,然后执行堆栈操作。

答案 1 :(得分:0)

所以我这样做的方法是使用Tree data structure。具有左右操作数的乘法和除法运算放在树的更深节点中。然后我编写了一个Evaluate()函数,它将遍历节点,然后评估每个表达式。

我认为这比将表达式转换为反向波兰表示法更快,然后在我需要时按照Lorehead的建议执行它,所以如果我错了请纠正我。

相关问题