在数学表达式中实例化变量

时间:2014-08-03 13:40:28

标签: c++ string postfix-notation infix-notation

我正在尝试编写一个能够计算数学表达式的C ++应用程序。这样做我必须将中缀表达式转换为后缀表达式,然后计算值。

在我开始将中缀表达式转换为后缀表达式并计算它之前,我必须首先通过给出值来实例化x和y。我的问题是这个。如何在' expr'中搜索x和y? instantiateVariable函数中的字符串,并在找到它时为其分配值(就像在main.cpp中完成的那样)?

我非常确定可以使用for循环,但我应该怎么做呢?任何帮助将不胜感激。

的main.cpp

int main()
{
    Expression expr("x + y + sqrt 25 - 3");

    expr.instantiateVariable('x',5);//Set x = 5
    expr.instantiateVariable('y',3);//Set y = 3

    /*
    The output of the following statement should be:

    Answer: 10
    */
    cout<<"Answer: "<<expr.evaluate()<<endl;
}

在我的标题文件夹中,我有以下内容:

Expression.h

class Expression
{
    public:
        Expression(string expr);
        ~Expression();
        void instantiateVariable(char name, int value);
        int evaluate();
};

1 个答案:

答案 0 :(得分:2)

我会选择一个天真的Shunthing-yard。原则很简单:

  1. 到达每个操作数并将它们放在队列中
  2. 每次遇到操作员将其放在堆栈上
  3. 如果堆栈顶部的运算符具有更高的优先级,则将其添加到队列中(需要先计算)
  4. 继续直到表达式结束,然后将所有内容弹出到队列
  5. 使用这种方法,支持括号也很容易。

    显然需要一些解析(准确的标记化),但这将非常简单。