C++後綴表達式求值
阿新 • • 發佈:2017-08-25
若是 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++後綴表達式求值