请教 中缀—后缀转换问题 帮忙找一下错误 在此真诚谢过

来源:互联网 发布:中国与大国关系数据库 编辑:程序博客网 时间:2024/05/01 11:46

帮忙看一下面的逻辑有没有错误,只能进行两个操作数的转换,再多一个数的表达式就不行,直接退出了。不知错在哪里,请求高手指教,不胜感激。这是我第一次发帖,用的不是很熟练,代码格式也不好看,请多多见谅。

 

Stack R;                                   //定义用于暂时储存运算符的栈
R.Push('@');                            //'@'结束符,具有最低优先级 0
int i,j;
i=0;                                    //用于指示扫描s1串中字符的位置,初值为 0
j=0;                                    //用于指示扫描s2串中字符的位置,初值为 0
char ch=s1[i];                       
while(ch!='@')
{                                      
if(ch==' ')
ch=s1[++i];                      
else if(ch=='(')
{
R.Push(ch);                            /
ch=s1[i++];
}
else if(ch==')')
{                                          
while(R.Peek()!='(')               //读栈顶元素
s2[j++]=R.Pop();
R.Pop();                                      
ch=s1[++i];
}
else if(ch=='+'||ch=='-'||ch=='*'||ch=='/')            
{                                                                                 
char w=R.Peek();
while(Precedence(w)>=Precedence(ch))
{                                                               //Precedence(w)函数返回运算符形参优先级
s2[j++]=w,R.Pop;w=R.Peek();
}
R.Push(ch); //把ch 运算符入栈
ch=s1[++i];
}
else {                                     
while(isdigit(ch)||ch=='.')
{
s2[j++]=ch;
ch=s1[++i];
}
s2[j++]=' ';                                                   
}
}
                                                                       
ch=R.Pop();
while(ch!='@')
{
if(ch=='(') {
cerr<<"expression error!"<<endl;
exit(1);
}
else {
s2[j++]=ch;
ch=R.Pop();
}
}                                                                  
s2[j++]='@';
s2[j++]='/0';
}
                                                                 //求运算符优先级的Precedence 函数

int Precedence(char op)
{                                                     
switch(op)
{
case '+':
case '-':return 1;                         
case '*':
case '/':return 2;                           
case '(':
case '@':
default:return 0;                   
}
}