1 #include2 #include 3 #include 4 using namespace std; 5 6 void TransformExpr(char *oldexpr,char *newexpr) 7 { 8 stack s; 9 int i=0; 10 int j=0; 11 while(oldexpr[i] != '\0') 12 { 13 switch(oldexpr[i]) 14 { 15 case '(' : 16 s.push(oldexpr[i++]); 17 break; 18 case '+': 19 case '-': 20 while(s.size()>0 && s.top() != '(') 21 { 22 newexpr[j++] = s.top(); 23 s.pop(); 24 } 25 s.push(oldexpr[i++]); 26 break; 27 case '*': 28 case '/': 29 while(s.size()>0 && s.top() != '(' && (s.top() == '*' || s.top() == '/')) 30 { 31 newexpr[j++] = s.top(); 32 s.pop(); 33 } 34 s.push(oldexpr[i++]); 35 break; 36 case ')': 37 while(!s.empty()) 38 { 39 char temp = s.top(); 40 s.pop(); 41 if(temp != '(') 42 { 43 newexpr[j++] = temp; 44 } 45 else 46 { 47 ++i; 48 break; 49 } 50 ) 51 break; 52 53 case ' ': 54 ++i; 55 break; 56 default : 57 while(oldexpr[i] >= '0' && oldexpr[i] <= '9') 58 { 59 newexpr[j++] = oldexpr[i]; 60 ++i; 61 } 62 newexpr[j++] = '#'; 63 break; 64 } 65 ) 66 while(!s.empty()) 67 { 68 newexpr[j++] = s.top(); 69 s.pop(); 70 } 71 newexpr[j] = '\0'; 72 ) 73 74 int Calculate(char *expr) 75 { 76 int i=0; 77 stack data; 78 int tmp; 79 while(expr[i] != '\0') 80 { 81 tmp = 0; 82 if(expr[i] >= '0' && expr[i] <= '9') 83 { 84 while(expr[i] >= '0' && expr[i]<='9') 85 { 86 tmp = tmp * 10 + expr[i++] - '0'; 87 } 88 data.push(tmp); 89 } 90 else if(expr[i] == '#') 91 ++i; 92 else 93 { 94 int a,b; 95 a= data.top(); 96 data.pop(); 97 b= data.top(); 98 data.pop(); 99 switch(expr[i++])100 {101 case '+':102 tmp = b+a;103 data.push(tmp);104 break;105 case '-':106 tmp = b-a;107 data.push(tmp);108 break;109 case '*':110 tmp = a*b;111 data.push(tmp);112 break;113 case '/':114 tmp = b/a;115 data.push(tmp);116 break;117 }118 }119 }120 return data.top();121 }