http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1004
题解:表达式计算 书上的模板
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string> #include<string.h> #include<stack> #include<iostream> #include<list> using namespace std; const int maxn = 1e5 + 5; stack<char>opr; list<char> ans; stack<int>num; int cal(int aa, char o, int bb) { int a = aa; int b = bb; switch (o) { case'/':return a / b; case'*':return a*b; case'-':return a - b; case'+':return a + b; } } string mp[7]; //+-* / ( ) //01234 5 string ofrd = "+-*/()#"; int id(char c) { return ofrd.find(c); } char cmp(char a, char b) { return mp[id(a)][id(b)]; } string ex; int main() { mp[0] = mp[1] = ">><<<>>"; mp[2] = mp[3] = ">>>><>>"; mp[4] = "<<<<<=>"; mp[5] = ">>>> >>"; mp[6] = "<<<<< ="; while (cin >> ex) { ex += '#'; //ex = '#' + ex; while (!opr.empty())opr.pop(); while (!num.empty())num.pop(); ans.clear(); int len = ex.length(); int i = 0; opr.push('#'); while (ex[i] != '#' || opr.top() != '#') { if (ex[i] >= '0'&&ex[i] <= '9') { num.push(ex[i] - '0'); ans.push_back(ex[i]); i++; } else { switch (cmp(opr.top(), ex[i])) { case'<': opr.push(ex[i]); i++; break; case'=': opr.pop(); i++; break; case'>': char c = opr.top(); opr.pop(); int a = num.top(); num.pop(); int b = num.top(); num.pop(); ans.push_back(c); a = cal(b, c, a); num.push(a); break; } } } cout << ans.front(); ans.pop_front(); for (auto t : ans)cout<< ' ' << t ; cout << endl; cout << num.top() << endl; num.pop(); } }