http://poj.org/problem?id=1400
题意:给出一个表达式可能含有多余的括号,去掉多余的括号,输出它的最简形式。
思路:先将表达式转化成后缀式,因为后缀式不含括号,然后再转化成中缀式,并根据运算符的优先级添加括号。
1 #include <stdio.h> 2 #include <string.h> 3 #include <string> 4 #include <stack> 5 #include <iostream> 6 using namespace std; 7 char ss[1010]; 8 int f(char ch) 9 { 10 if(ch=='(') 11 return 0; 12 else if(ch=='+'||ch=='-') 13 return 1; 14 else if (ch=='*'||ch=='/') 15 return 2; 16 } 17 void change1(string s) 18 { 19 int l = 0; 20 stack<char>p; 21 while(!p.empty()) p.pop(); 22 for (int i = 0; i < s.size(); i++) 23 { 24 if(s[i]>='a'&&s[i]<='z') 25 ss[l++]=s[i]; 26 else 27 { 28 if (s[i]=='(') 29 p.push(s[i]); 30 else if (s[i]==')') 31 { 32 while(!p.empty()) 33 { 34 char ch = p.top(); 35 p.pop(); 36 if(ch=='(') 37 break; 38 ss[l++] = ch; 39 } 40 } 41 else 42 { 43 while(!p.empty()&&f(p.top())>=f(s[i])) 44 { 45 char ch = p.top(); 46 p.pop(); 47 ss[l++] = ch; 48 } 49 p.push(s[i]); 50 } 51 52 } 53 } 54 } 55 while(!p.empty()) 56 { 57 ss[l++] = p.top(); 58 p.pop(); 59 } 60 ss[l++]='