中缀表达式转后缀表达式有误玄关求助
  • 板块学术版
  • 楼主abc1234shi
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/8/15 10:30
  • 上次更新2024/8/15 13:15:12
查看原帖
中缀表达式转后缀表达式有误玄关求助
941501
abc1234shi楼主2024/8/15 10:30
#include<bits/stdc++.h>
using namespace std;
bool C[128][128];
stack<char> a; 
string s;
int main(){
	C['+']['-']=true;
	C['+']['+']=true;
	C['+']['*']=false;
	C['+']['/']=false;
	C['-']['-']=true;
	C['-']['+']=true;
	C['-']['*']=false;
	C['-']['/']=false;
    C['*']['-']=true;
	C['*']['+']=true;
    C['*']['*']=true;
	C['*']['/']=true;
    C['/']['-']=true;
	C['/']['+']=true;
	C['/']['*']=true;
	C['/']['/']=true;//统计表格 
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]>='0'&&s[i]<='9')cout<<s[i];//如果是数字直接输出 
        else if(a.size()==0){//如果栈顶为空加入 
        	a.push(s[i]);
		}
		else if(s[i]==')'){
			while(a.top()!='('){
				cout<<a.top();
				a.pop();
			}
			a.pop(); 
		}//如果等于右括号,右括号到左括号之间的符号全部输出 
		else if(s[i]=='('){ //  
			a.push(s[i]);
		}//如果等于左括号,直接入栈 
		else{
			if(C[a.top()][s[i]]==false){
				a.push(s[i]);
			}//如果栈顶元素优先级高,弹出 
			else{
				while(C[a.top()][s[i]]==false&&a.size()!=0)
				{
					cout<<a.top();
					a.pop();
				}
				a.push(s[i]);
			}//否则弹出比s[i]高的元素,知道不比s[i]高或栈为空停止,加入s[i] 
		}
	}
	while(a.size()!=0){
		cout<<a.top();
		a.pop();
	}//以防有剩余,输出 
	return 0;
}

hack:(12+5)*6-4

正确:125+6*4-

我的输出:125+64*-

2024/8/15 10:30
加载中...