1 #include<iostream>
2 #include<string>
3 #include<stack>
4 using namespace std;
5
6 void TransformExpr(char *oldexpr,char *newexpr)
7 {
8 stack<char> 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<int> 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 }