1. 程式人生 > >逆波蘭(字尾)表示式求值C++實現

逆波蘭(字尾)表示式求值C++實現

之前的一篇文章裡已經講到裡怎麼將中綴表示式轉化為字尾表示式:

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

現在我們用C++實現如何根據字尾表示式求值

1、遍歷字尾表示式;
2、如果掃描的是數字,則將其壓入棧中,繼續遍歷;
3、如果掃描的專案是一個二元運算子+ - * /,則棧頂到兩個元素依次出棧,計算後再將結果存入棧中;(接下來到C++實現僅考慮裡二元運算子)
4、如果掃描的專案是一個一元運算子,則對棧頂元素出棧並執行該運算,然後將結果入棧;

5、將遍歷完字尾表示式以後會發現棧中其實只剩一個元素,即為結果,直接列印輸出即可

C++程式碼:

#include

<iostream>

#include<stack>

#include<string>

usingnamespacestd;

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;

return0;

}

執行結果:

9 3 1 - 3 * + 10 2 / +

20

Program ended with exit code: 0