中缀表达式转为后缀表达式用栈写的,提交样例没问题,但是评测不通过,请帮我指出问题相信
#include<bits/stdc++.h>
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(a[i]);
} else if(a[i]==')') {
for(; z.top()!='(';) {
s.push(z.top());
z.pop();
}
z.pop();
}
}
}
while(z.top()!='#') {
s.push(z.top());
z.pop();
}
int len=s.size();
for( i=0; i<len; i++) {
d[i]=s.top();
s.pop();
}
for(i--; i>=0; i--) {
printf("%c",d[i]);
}
}