Description 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input 输入一个算术表达式,以‘#’字符作为结束标志。
Output 输出该表达式转换所得到的后缀式。
Sample Input ab+(c-d/e)f# Output abcde/-f+
#include<bits/stdc++.h> using namespace std; char a[10000], e; int t; void push(char e) { a[t++] = e; } void pop() { t--; } char top() { return a[t - 1]; } int isempty() { if(t == 0) return 1; else return 0; } int bian(char e) { int flag; if(e == '(') flag = 1; if(e == ')') flag = 4; if(e == '+') flag = 2; if(e == '-') flag = 2; if(e == '*') flag = 3; if(e == '/') flag = 3; return flag; } void change(char e) { if(e == '(') push(e); else if(e == ')') { while(1) { if(top() == '(') { pop(); break; } else { printf("%c", top()); pop(); } } } else if(bian(top()) < bian(e)) { push(e); } else if(bian(top()) >= bian(e)) { printf("%c", top()); pop(); push(e); } } int main() { t = 0; while(~scanf("%c", &e) && e != '#') { if(e >= 'a' && e <= 'z') { printf("%c", e); } else change(e); } while(!isempty()) { printf("%c", top()); pop(); } return 0; }