中缀表达式转换为后缀表达式

//C++实现

代码如下:

#include <iostream>

#include <stack>

#include <string>

#include <stdio.h>

using namespace std;

int precedence(char &c);

int main()

{

 string s;

 cin>>s;

 stack<char> sc;

 sc.push('@');

 for(int i=0;i<s.length();i++)

 {  

char c=s.at(i);

  switch(c)  

{  

case '+':

  case '-':

  case '*':

  case '/':  

     while(precedence(c)<=precedence(sc.top()))

   {  

   cout<<sc.top();

    sc.pop();  

  }   

sc.push(c);  

  break;  

  case '(':    sc.push(c);  

  break;

  case ')':    while(sc.top()!='(')

   {   

  cout<<sc.top();  

   sc.pop();  

  }   

sc.pop();  

  break;

  default:    cout<<int(c-48)<<" ";

      }

 }  

while(sc.top()!='@')

 {

  cout<<sc.top()<<" ";

  sc.pop();

 }  

cout<<endl;

return 0;

}

int precedence(char &c)

{

 switch(c)

 {

  case '+':    return 1;  

case '-':    return 1;  

case '*':    return 2;

  case '/':    return 2;

  case '(':    return 0;

  case '@':    return -1;

    }

}
View Code

 

posted on 2013-07-08 15:22  Forgiving  阅读(78)  评论(0编辑  收藏  举报