关于#中缀转后缀#的问题,如何解决?

中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将中缀表达式转换为后缀表达式。(测试数据元素为单个字符)
输入
中缀表达式
输出
后缀表达式
样例输入
A+(B-C/D)E
样例输出
ABCD/-E
+
没发现错误的地方,请帮我指出并改正,谢谢。


#include
using namespace std;
char Precede(char a, char b){
    if (a == '+' || a == '-'){
        if (b == '+' || b == '-' || b == ')' || b == '#'){
            return '>';
        }else{
            return '<';
        }
    }else if (a == '*' || a == '/'){
        if (b == '+' || b == '-' || b == '*' || b == '/' || b == ')' || b == '#'){
            return '>';
        }else{
            return '<';
        }
    }else if (a == '('){
        if (b == ')'){
            return '=';
        }else if (b == '#'){    
            return '?';
        }else{
            return '<';
        }
    }else if (a == '#'){
        if (b == '#'){
            return '=';
        }else if (b == ')'){    
            return '?';
        }else {
            return '<';
        }
    }
}
int main(){
    stack<char>s;
    stack<char>z;
    char b='#';
    char d[10005]={0};
    z.push(b);
    char a[10005];
    scanf("%s",a);
    int n,i,j;
    n=strlen(a);
    a[n]=b;
    for(i=0;i<=n;i++){
        if(a[i]!='*'&&a[i]!='+'&&a[i]!='-'&&a[i]!='/'&&a[i]!='#'&&a[i]!='('&&a[i]!=')'){
            s.push(a[i]);
        }
        else if((Precede(z.top(),a[i]))=='<'){
            z.push(a[i]);
        }else if((Precede(z.top(),a[i]))=='>'){
            if(a[i]!=')'){
            s.push(z.top());
            z.pop();
            i--;
            }
            else if(a[i]==')'){
                for(;z.top()!='(';){
                s.push(z.top());
                z.pop();
                }
                z.pop();
            }
        }else if((Precede(z.top(),a[i]))=='='){
            z.pop();
        }
    }
    while(!s.empty()){
    d[i]=s.top();
    i++;
    s.pop();
}
for(i--;i>=0;i--){
    printf("%c",d[i]);
}
}

中缀转后缀是一种常见的算法,可以使用栈结构来实现。首先,定义一个优先级函数,用于比较运算符的优先级;然后,将中缀表达式的每个字符读入栈中,如果是操作数,则直接输出;如果是运算符,则比较其与栈顶元素的优先级,如果优先级比栈顶元素高,则将其压入栈中;如果优先级比栈顶元素低或者相等,则将栈顶元素弹出,并输出,直到栈顶元素的优先级比当前元素低,然后将当前元素压入栈中;最后,当读取完所有字符后,将栈中剩余的元素依次弹出,并输出,即可得到后缀表达式。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^