C++中缀表达式转后缀表达式,怎么转换括号呀! 改了一天啦
#include <iostream>#include <string>using namespace std;string RPN;char END='#',push='#';int priority(char &ch){ switch(ch){ case '^': return 5; case '(': return 4; case ')': return 3; case '*': case '/': return 2; case '+': case '-': return 1; case '#': return -1; default: return 0; }}typedef struct SNode{ struct SNode *top; char ch; struct SNode *next;}*StackList;typedef StackList operators;void InitStack(operators &P){ SNode *node=(SNode*)malloc(sizeof(SNode)); node->top=NULL; node->ch='#'; node->next=NULL; P->top=node;}void PushStack(operators &P,char &ch){ cout<<"top:"<<P->top->ch<<"----Push:"<<ch<<endl; SNode *node=(SNode*)malloc(sizeof(SNode)); node->top=NULL; node->ch=ch; node->next=P->top; P->top=node;}void PopStack(operators &P,char &ch){ ch=P->top->ch; P->top=P->top->next; cout<<"Pop:"<<ch<<endl;}void PrintStack(operators &P){ char ch='\0'; while(P->top->ch!=END){ PopStack(P,ch); if(ch!='('&&ch!=')') RPN+=ch; if(priority(P->top->ch)<priority(push)){ push='#'; break; } } if(P->top->ch=='('&&push!='('){ PopStack(P,ch); } cout<<RPN<<endl;}void convert(operators &P,char &ch){ cout<<"----------ing"<<ch<<endl; char temp=P->top->ch; if(priority(ch)){ if(priority(temp)<priority(ch)){ if(ch=='(') END='('; PushStack(P,ch); if(ch==')') PrintStack(P); }else{ push=ch; PrintStack(P); PushStack(P,ch); } }else RPN+=ch;}int main(){ operators P=(operators)malloc(sizeof(operators)); P->top=NULL; P->ch=NULL; P->next=NULL; InitStack(P); string str; char ch='\0'; cout<<"请输入中缀表达式:"<<endl; cin>>str; for(short i=0;i<str.length();i++){ ch=str[i]; if(ch==' ') continue; convert(P,ch); } END='#'; PrintStack(P); return 0;}