如何做到中缀表达式转后缀表达式?

欢迎来https://nxkkds.coding.io/瞅瞅,千万要walk through and road through don't wrong through

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{	
	int top=-1;
	char a[50];//数组模拟栈
	char ch;
	while((ch=getchar())!='\n')//一个一个字符读入
	{
		if('A'<=ch&&ch<='z') cout<<ch;//如果是字符直接输出。
		else if(top==-1) a[++top]=ch;//如果栈为空直接将运算符进入	
		else if(ch=='(') a[++top]=ch;
		else if(ch==')')    //考虑括号,括号会改变运算符的优先级
		{
			while(a[top]!='(')
			{
				cout<<a[top--];
			}
			top--;
		}
		else if(ch=='*' || ch=='/') //乘除法的优先级大于加减法
		{	
			if(a[top]=='*' || a[top]=='/')//如果栈顶是乘除法,输出栈顶,再进栈。
			{
				cout<<a[top--];
				a[++top]=ch;
			}
			else //如果栈顶是加减法或是括号就进栈。
			{
				a[++top]=ch;
			}
		}
		else if(ch=='+' || ch=='-')//加减法优先级较小
		{
			if(a[top]=='(')//考虑栈顶是不是括号
				a[++top]=ch;
			else if(a[top]=='+' || a[top]=='-')//栈顶是加减,就输出,再进栈
			{
				cout<<a[top--]; //加一减一等于零嘛,其实可以不用写++--的,直接赋值即可 
				a[++top]=ch;	//即,可写成 cout<<a[top];a[top]=ch;
			}
			else if(a[top]=='*' || a[top]=='/')//栈顶是乘除,就考虑栈顶的前一位是否为空
			{
				cout<<a[top--];//先输出栈顶
				if(top!=0) cout<<a[top--];//如果不是空就继续输出栈顶
				a[++top]=ch;//再进栈
			}
		}
	}
	
	while(top>=0)
		cout<<a[top--];//把剩下的符号都输出 
	
	return 0;
}

相关文章: