首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

C++中缀表达式转后缀表达式,如何转换括号呀! 改了一天啦

2012-03-09 
C++中缀表达式转后缀表达式,怎么转换括号呀! 改了一天啦C/C++ code#include iostream#include stringu

C++中缀表达式转后缀表达式,怎么转换括号呀! 改了一天啦

C/C++ code
#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;}


高手指点下!~实在头疼啦.

[解决办法]
后缀表达式好像不需要括号吧
[解决办法]
后缀不用括号,函数priority中括号的值应最低不是最高,碰到括号就进栈,你试试

热点排行