1. 程式人生 > >C++後綴表達式求值

C++後綴表達式求值

若是 ascii 思想 mes else == cout 區分 tca

#include <iostream>
#include <stack>
using namespace std;
int cal(int a,int b,char c){
    if(c==+)  return a+b;
    else if(c==-)  return a-b;
    else if(c==*)  return a*b;
    else if(c==/)  return a/b;
    else return 0;
}

int postcal(char* post){
    stack <int > s;
    
while(*post){ if(*post >=0&& *post<=9){ s.push(*post); } else{ int a = s.top()-48; s.pop(); int b = s.top()-48; s.pop(); int c = cal(b,a,*post); s.push(c+48); } post
++; } return s.top()-48; } int main(int argc, const char * argv[]) { char* post = new char; cin>>post; int res = postcal(post); cout<<"答案是:"<<res<<endl; return 0; }

求解思想:

從左到右掃描輸入的後綴表達式,若是數字則入棧;若是操作符,則從棧中取出兩個數,進行相應計算後,將結果放回棧中,;掃描完後,棧頂剩余元素就是結果。

由於輸入時並未區分數字和操作符,而是統一規定成了char 類型,所以要將每兩個操作數計算的結果也要轉換成ASCII碼對應的字符類型,所以要進行+-48的操作。

也可以在一開始讀取輸入的時候就區分int類型和char類型,然後分開設棧。

C++後綴表達式求值