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

Instantiating a variable in a mathematical expression

本文关键字:实例化 变量 表达式      更新时间:2023-10-16

我正试图编码一个c++应用程序,将能够计算一个数学表达式。为此,必须将中缀表达式转换为后缀表达式,然后计算值。

在开始将中缀表达式转换为后缀表达式并计算它之前,我必须首先通过赋值来实例化x和y。我的问题是。我如何在instantiateVariable函数中的"expr"字符串中搜索x和y,并将值分配给它(就像在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;
}

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

Expression.h

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

我会选择朴素的Shunthing-yard。原理很简单:

  1. 到达每个操作数并将它们放入队列
  2. 每次遇到操作符就把它放到堆栈中
  3. 如果堆栈顶部的操作符具有更高的优先级,则将其弹出并将其添加到队列中(需要首先计算)
  4. 继续直到表达式结束,然后将所有内容弹出到队列

支持括号也很容易使用这个方法。

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