#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int OP[7][7]{
1,1,0,0,0,-1,1,// 以矩阵来表示 运算符之间的关系。
1,1,0,0,0,-1,1,// 1 表示 栈顶元算符比 刚刚下一个元算符 高级 可以运算
1,1,1,1,0,-1,1,// 0 表示 栈顶 运算符低级 就 将下一个 运算符入栈。
1,1,1,1,0,-1,1,// -1 表示 拥有 一对括号匹配 将 括号内容输出
0,0,0,0,0,-1,9,
1,1,1,1,9,-1,1,
0,0,0,0,0,9,2
};
int Name( char a ){
int n;
switch( a )
{
case '+': n=0; break;
case '-': n=1; break;
case '*': n=2; break;
case '/': n=3; break;
case '(': n=4; break;
case ')': n=5; break;
case '#': n=6; break;
default : n=-1;
}
return n;
}
int Precede( char a, char b){
int an1,an2;
an1=Name(a);
an2=Name(b);
return OP[an1][an2];
}
int main(){
char a[100];
char Stack[100];
int top;
int len;
printf("以#号结束、、、、\n");
scanf("%s",a);
len=strlen(a);
//a+b*printf("%d",len);
top=-1;
Stack[++top]='#';
for( int i=0; i<len; ++i )
{
if( Name(a[i])==-1 )
printf("%c",a[i]);
else
{
switch( Precede(Stack[top],a[i]) )
{
case 0: Stack[++top]=a[i]; break;
case 9: printf("error\n"); break;
case 1:
printf("%c",Stack[top]);
--top;
while( Precede(Stack[top],a[i])==1 )
{
printf("%c",Stack[top]);
--top;
}
Stack[++top]=a[i];
break;
case -1:
while( Stack[top]!='(' )
{
printf("%c",Stack[top]);
top--;
}
top--;
break;
case 2:
break;
}
}
}
return 0;
}
算术表达式中缀转换成后缀
最新推荐文章于 2023-04-22 15:53:51 发布