第一次看题,实在没看懂,然后就去百度逆波兰表达式,结果百度百科里有把中缀表达式改为后缀表达式的算法
所以直接就写了出来
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
typedef struct stack{
char *base;
char *top;
}stack;
int pre(char sign){
switch (sign) {
case '+':
case '-':
return 1;
break;
case '*':
case '/':
return 2;
break;
case '^':
return 3;
break;
default:
return 0;
break;
}
}
int main(void)
{
stack sign;
int n,i;
char expre[100];
scanf("%d",&n);
while (n--) {
sign.base=(char*)malloc(100*sizeof(char));
sign.top=sign.base+1;
*sign.base='#';
scanf("%s",expre);
for (i=0; expre[i]!='#'; i++) {
if (expre[i]=='(') {
*sign.top++=expre[i];
}
else if(expre[i]==')'){
while (*(sign.top-1)!='(') {
printf("%c",*(sign.top-1));
sign.top--;
}
sign.top--;
}
else if (expre[i]=='+'||expre[i]=='-'||expre[i]=='*'||expre[i]=='/'||expre[i]=='^'){
while (((*(sign.top-1)==expre[i])&&(expre[i]=='^'))?(pre(*(sign.top-1))>pre(expre[i])):(pre(*(sign.top-1))>=pre(expre[i]))) {
printf("%c",*(sign.top-1));
sign.top--;
}
*sign.top++=expre[i];
}
else printf("%c",expre[i]);
}
while (sign.top!=sign.base+1) {
printf("%c",*(sign.top-1));
sign.top--;
}
printf("\n");
}
return 0;
}
提交到网教后,最后一个案例WA了
看了几遍程序,没看出啥毛病,就也没管
后来才知道,a+b+c应该转为ab+c+;而a^b^c要转为abc^^
改了之后,就AC了