码迷,mamicode.com
首页 > 其他好文 > 详细

计算后缀表达式

时间:2018-11-24 21:07:55      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:code   top   transform   data   form   nsf   cas   oid   str   

  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 }

 

计算后缀表达式

标签:code   top   transform   data   form   nsf   cas   oid   str   

原文地址:https://www.cnblogs.com/susidian/p/10013232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!