理解后缀表达式求值代码

Understanding postfix expression evaluation code

本文关键字:代码 表达式 后缀      更新时间:2023-10-16

我试图理解这段代码。它的作用是给表达式求值加上后缀。我有理解代码的问题。如果有人能帮助我,我将非常感激。

#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
int main()
{

    //suppose a contains the string..
    //n is the length of string...
    char a[10]="A+B/C";
    int n = strlen(a)
    stack<int>s;
    for (int i=0;i<n;i++)
    {
        if (a[i]=='+')
        {
            s.push(s.pop()+s.pop());
            int temp1 = s.top();
            s.pop();
            int temp2 = s.top();
            s.pop();
            s.push(temp1 * temp2);
        }
        if (a[i]=='*')
            s.push(s.pop() * s.pop());
        if ((a[i]>='0') && (a[i]<='9'))
            s.push(0);
        while ((a[i]>='0') && (a[i]<='9'))
            s.push(10*s.pop()+(a[i++]-'0'));
    }
    cout<<s.pop()<<endl;
    return 0;
}

这个网站看起来是一个很好的资源,但是表达式应该使用数字,而不是字母。

假设你有一个中缀表达式1+2*3-4*5。相应的后缀是123*+45*-。首先,从左到右扫描字符串。前三个数字是操作数,因此它们将按照1(底部),2(中间),3(顶部)的顺序存储在堆栈中。接下来是*操作符。要处理这个问题,请从堆栈中取出前两个操作数并将它们相乘(取出的第一个是右操作数,第二个是左操作数)。这将计算为2*3=6,6将存储在堆栈中,使其成为1,6。

下一个是+操作符。1和6被弹出并添加,7被存储在堆栈中。在此之后,4和5也被压入堆栈(7,4,5)。下一个字符是另一个*操作符,因此它计算4*5=20并将20压入堆栈(7,20)。

最后,还有一个-操作符。将7和20取出并计算为7-20=(-13)。这将被压入堆栈,并准备作为您的最终答案弹出。

希望这有助于澄清任何困惑(假设我没看错你的问题)。