逆波蘭(字尾)表示式求值C++實現
之前的一篇文章裡已經講到裡怎麼將中綴表示式轉化為字尾表示式:
https://blog.csdn.net/weixin_39138071/article/details/79809533
現在我們用C++實現如何根據字尾表示式求值
1、遍歷字尾表示式;
2、如果掃描的是數字,則將其壓入棧中,繼續遍歷;
3、如果掃描的專案是一個二元運算子+ - * /,則棧頂到兩個元素依次出棧,計算後再將結果存入棧中;(接下來到C++實現僅考慮裡二元運算子)
4、如果掃描的專案是一個一元運算子,則對棧頂元素出棧並執行該運算,然後將結果入棧;
5、將遍歷完字尾表示式以後會發現棧中其實只剩一個元素,即為結果,直接列印輸出即可
C++程式碼:
#include
#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
}
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
return0;
}
執行結果:
9 3 1 - 3 * + 10 2 / +
20
Program ended with exit code: 0