计算后缀表达式

Posted susidian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算后缀表达式相关的知识,希望对你有一定的参考价值。

  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] != )
 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] = ;
 72 )
 73 
 74 int Calculate(char *expr)
 75 {
 76 int i=0;
 77 stack<int> data;
 78 int tmp;
 79 while(expr[i] != )
 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 }

 

以上是关于计算后缀表达式的主要内容,如果未能解决你的问题,请参考以下文章

表达式的计算(中缀表达式转为后缀表达式或逐步计算)

后缀表达式(逆波兰表达式)的计算---栈实现

栈实现综合计算器(中缀表达式),前缀,中缀,后缀表达式,逆波兰计算器

数据结构之栈对逆BoLand表达式的计算

c语言 后缀表达式计算

java简易计算机(用栈实现中缀转后缀,计算后缀表达式)