蒟蒻玄关求助
  • 板块灌水区
  • 楼主h310
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/14 15:44
  • 上次更新2024/8/14 17:22:29
查看原帖
蒟蒻玄关求助
1031479
h310楼主2024/8/14 15:44
#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;
}

蒟蒻中缀表达式赚后缀表达式出错,这个式子(3+4)∗5−6(3+4)*5-6输出的是34+56−∗34+56-*,正解是34+5∗6−34+5*6-,求调。

验证码:qwqp

2024/8/14 15:44
加载中...