正文

四则运算表达式求值2006-05-05 21:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/boxer/13606.html

分享到:

int Calc(int a, int b, char oprt)
{
 switch(oprt)
 {
 case '+':
  return a+b;
 case '-':
  return a-b;
 case '*':
  return a*b;
 case '/':
  return a/b;
 }
}

int expr(char a[])
{
 char  ch, last_oprt;
 int   c, d;
 CStack<int>  oprd;
 CStack<char> oprt;

 while(ch=*a++)
 {
  if(ch == '(')
  {
   oprt.Push(ch);
  }
  else if(ch == ')')
  {
   while(oprt.IsEmpty() == false)
   {
    last_oprt = oprt.Pop();
    if(last_oprt == '(') // 遇到匹配的左括号退出
     break;
    d = oprd.Pop();
    c = oprd.Pop();
    oprd.Push(Calc(c, d, last_oprt));
   }
  }
  else if(ch == '+' || ch == '-')
  {
   if(oprt.IsEmpty() == false)
   {
    last_oprt = oprt.Top();
    if(last_oprt != '(')
    {
     d = oprd.Pop();
     c = oprd.Pop();
     oprd.Push(Calc(c, d, last_oprt));
     oprt.Pop();
    }
   }
   oprt.Push(ch);
  }
  else if(ch == '*' || ch == '/')
  {
   if(oprt.IsEmpty() == false)
   {
    last_oprt = oprt.Top();
    if(last_oprt == '*' || last_oprt == '/')
    {
     d = oprd.Pop();
     c = oprd.Pop();
     oprd.Push(Calc(c, d, last_oprt));
     oprt.Pop();
    }
   }
   oprt.Push(ch);
  }
  else
  {
   oprd.Push(ch-'0');
  }
 }

 while(oprt.IsEmpty() == false)
 {
  last_oprt = oprt.Pop();
  if(last_oprt == '(')
   break;
  else
  {
   d = oprd.Pop();
   c = oprd.Pop();
   oprd.Push(Calc(c, d, last_oprt));
  }
 }

 return oprd.Pop();
}

阅读(3553) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册