后綴表達式求值



任務描述

本關任務:熟練掌握STL模板庫中棧stack的基本操作,並利用棧實現后綴表達式求解。

相關知識

為了完成本關任務,你需要掌握:1.后綴表達式求解。

后綴表達式求解 算法思想:從左至右掃描表達式,遇到數字時,將數字壓入棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素 - 運算符 - 棧頂元素),並將結果入棧;重復上述過程直到表達式最右端,最后運算得出的值即為表達式的結果。

例如后綴表達式2 1 3 + * 4 -, 后綴表達式求值

編程要求

本關的編程任務是補全右側代碼片段main中Begin至End中間的代碼,具體要求如下:

讀取后綴表達式,並基於棧的插入、刪除等基本操作實現后綴表達式求解,表達式中所有的操作數為單一的數字:0~9,運算符僅包含:+ - * ( )。

輸入輸出說明

本任務的輸入為單個測試用例,輸入長度不超過100,且操作數僅為0~9之間的整數,操作符只包含“+-*/”等算數運算符的中綴表達式,輸出為該中綴表達式的計算結果。

以下是平台的測試樣例:

測試輸入:123+4*+5- 預期輸出:16

輸入格式:后綴表達式 輸出格式:運算結果,末尾換行\n

 

#include<iostream>
#include<stack>
#include<string.h>
#include<string>
using namespace std;

int main() {
    string s;
    cin>>s;
    stack<int>st;
    for(int i=0;i<s.size();i++){
        if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
            int num1=st.top();
            st.pop();
            int num2=st.top();
            st.pop();
            if(s[i]=='+')st.push(num2+num1);
            if(s[i]=='-')st.push(num2-num1);
            if(s[i]=='*')st.push(num2*num1);
            if(s[i]=='/')st.push(num2/num1);
        }else{
            char ch=s[i];
            string s2;
            char s1[2]={ch,0};
            s2=s1;
            st.push(stoi(s2));
        }
    }
    
    cout<<st.top();

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM