中缀表达式求值

这篇博客介绍了中缀表达式求值的过程,包括如何处理数值和运算符,特别是遇到括号的情况。通过在运算符栈中使用特殊字符来解决首个运算符不运算和结束运算的判断问题。
摘要由CSDN通过智能技术生成

中缀表达式求值

中缀表达式求值的运算方法为

  1. 当遇到数值直接压入数值栈
  2. 当遇到运算符时比较运算符栈栈顶运算符的优先级,如果大于等于当前运算符优先级,则弹出两个数值进行运算,并入栈
  3. 当遇到(时直接入栈
  4. 当遇到)时计算直到(

代码用到了一点小技巧,首先在运算符栈里面存放了一个优先级最低的字符(‘q’),因此当第一个运算符比较优先级时一定大于栈顶优先级,故此实现第一个入栈的运算符不会进行运算(这种方法解决了每次都判断是否为第一个运算符的问题),并且在表达式最后加入了一个第二低优先级的符号(‘p’),相当于数学里面的等号,起到开始运算直到遇到‘q’。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
map<char,int> prio;//存放运算符优先级
stack<char>oper;//定义运算符栈
stack<int>num;//定义数值栈
void init(){//设置运算符的优先级,并在栈里面放入一个最低优先级的字符
	prio['-']=prio['+']=1;
	prio['*']=prio['/']=2;
	prio['p']=0;
	prio['q']=-1;
	oper.push('q');	
}
int cal(int d,int e,char c){//运算符计算
	switch(c){
		case '+' :return e+d;
		case '-' :return e-d;
		case '*' :return e*d;
		c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值