【数据结构】C++ 中缀表达式转后缀表达式  代码实现

中缀表达式转后缀表达式 

#include <iostream>
#include <stack>
using namespace std;

//返回符号优先级 
int prio(char op){
	int prio;
	if(op == '*' || op == '/'){
		prio = 2;
	}
	if(op == '+' || op == '-'){
		prio = 1;
	}
	if(op == '('){
		prio = 0;
	}
	return prio;
}

bool trans(string &str, string & str1){
	stack<char> s;
	int i = 0;
	for(i = 0; i < str.size(); i++){
		if(str[i] >= '0' && str[i] <= '9'){		//是数字直接写到式子上 
			str1 += str[i];
		}else{
			if(s.empty()){						//栈内空,直接进栈 
				s.push(str[i]);	
			} else if(str[i] == '('){			//左括号可直接进栈 
				s.push(str[i]);
			} else if(str[i] == ')'){			//右括号,弹出栈内元素,直到( 
				while(s.top() != '('){
					str1 += s.top();
					s.pop();
				}
				s.pop();		
			} else {
				while(prio(str[i]) <= prio(s.top())){	//符号优先级小于栈内符号优先级 
					str1 += s.top();					//栈内符号出栈 
					s.pop(); 
					if(s.empty()){
						break;
					} 
				}
				s.push(str[i]);
			}	
		}
	}
	while(!s.empty()){	//最后栈内不是空的,弹出栈内所有符号 
		str1+= s.top();
		s.pop(); 
	}
	return true;
} 


int main(int argc, char** argv) {
	string infix, postfix;
	
	cin >> infix;
	trans(infix, postfix);
	cout << postfix << endl;
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值