逆波兰(后缀)表达式求值C++实现

之前的一篇文章里已经讲到里怎么将中缀表达式转化为后缀表达式:

https://blog.csdn.net/weixin_39138071/article/details/79809533

现在我们用C++实现如何根据后缀表达式求值

1、遍历后缀表达式;
2、如果扫描的是数字,则将其压入栈中,继续遍历;
3、如果扫描的项目是一个二元运算符+ - * /,则栈顶到两个元素依次出栈,计算后再将结果存入栈中;(接下来到C++实现仅考虑里二元运算符)
4、如果扫描的项目是一个一元运算符,则对栈顶元素出栈并执行该运算,然后将结果入栈;

5、将遍历完后缀表达式以后会发现栈中其实只剩一个元素,即为结果,直接打印输出即可

C++代码:

#include<iostream>

#include<stack>

#include<string>

using namespace std;


int main(){

    string s;

    getline(cin,s);

    stack<int> sta;

    int left=0;

    int right=0;

    for(int i=0;i<s.size();i++){

        if(s[i]>='0'&&s[i]<='9'){

            string s2="";

            while(s[i]>='0'&&s[i]<='9'){

                s2+=s[i];

                i++;

            }

            sta.push(stoi(s2));

        }

        else if(s[i]!=' '){

            if(!sta.empty()){

                right=sta.top();

                sta.pop();

            }

            if(!sta.empty()){

                left=sta.top();

                sta.pop();

            }

            switch(s[i]){

                case '+':

                    sta.push(left+right);

                    break;

                case '-':

                    sta.push(left-right);

                    break;

                case '*':

                    sta.push(left*right);

                    break;

                case '/':

                    sta.push(left/right);

                    break;

                default:

                    break;

            }

        }

    }

    cout<<sta.top()<<endl;

    return 0;

}

运行结果:

9 3 1 - 3 * + 10 2 / +

20

Program ended with exit code: 0




猜你喜欢

转载自blog.csdn.net/weixin_39138071/article/details/79813112