表达式求值优先级判断

在这里插入图片描述
这里的形参a =GetTop(OPTR) 从存字符的栈里获取, b=ch ch是从字符缓存区里读的字符
例如输入2+3*2# (当ch读到非数字时才会进入Precede函数,这一点不在细说,不懂的话请仔细阅读,课本上的)``在这里插入图片描述
优先级条件一:
同级运算符,左边的优先运算

	if((a=='+'||a=='-')&&(b=='+'||b=='-'))
	return '>';
`	if((a=='*'||a=='/')&&(b=='*'||b=='/'))
	return '>';``
	
	**优先级条件二**
	乘除先算,加减后算
		if((a=='*'||a=='/')&&(b=='+'||b=='-'))	
	return '>';
	if((a=='+'||a=='-')&&(b=='*'||b=='/'))
	return '<';	
	**优先条件三**
	  括号处理
	  1.扫到字符'('  就进栈  即  b='('if(b=='(')//ch扫描到(  就进栈   (返回'<'号时就将a进栈)
	return '<';
	  2.栈头a='('    扫描b=')'if(a=='('&&b==')')//栈头  (  与  ch扫描到的)   则相等  则去除 ( 
	return '=';
	
	3.栈头 a='('  b=任何运算符  就进栈
	if(a=='('&&b=='+') //括号的判断 
	return '<';
	if(a=='('&&b=='-') 
	return '<';	
	if(a=='('&&b=='*') 
	return '<';
	if(a=='('&&b=='/') 
	return '<';
	栈头a=任何运算符  b=')'  就返回'>'  
	if(a=='+'&&b==')')
return '>';
if(a=='-'&&b==')')
return '>';
if(a=='*'&&b==')')
return '>';
if(a=='/'&&b==')')
return '>';//------------ 
**优先级条件四**
字符#优先级最小  
	if(a=='#'&&b=='+') //------------ 
	return '<';
	if(a=='#'&&b=='-')
	return '<';
	if(a=='#'&&b=='*')
	return '<';
	if(a=='#'&&b=='/')
	return '<';	
	if(a=='+'&&b=='#')
	return '>';
	if(a=='-'&&b=='#')
	return '>';	
	if(a=='/'&&b=='#')
	return '>';	
	if(a=='*'&&b=='#')//------#的判断 
	return '>';		
**代码总览**
char Precede (char a,char b){//优先级判断     !!!!!!!!!!! 

	if((a=='+'||a=='-')&&(b=='+'||b=='-'))
	return '>';
	if((a=='+'||a=='-')&&(b=='*'||b=='/'))
	return '<';
	if((a=='*'||a=='/')&&(b=='+'||b=='-'))	
	return '>';
	if((a=='*'||a=='/')&&(b=='*'||b=='/'))
	return '>';
	if(a=='('&&b==')')//栈头  (  与  ch扫描到的)   则相等  则去除 ( 
	return '=';
	if(a=='#'&&b=='+') //------------ 
	return '<';
	if(a=='#'&&b=='-')
	return '<';
	if(a=='#'&&b=='*')
	return '<';
	if(a=='#'&&b=='/')
	return '<';	
	if(a=='+'&&b=='#')
	return '>';
	if(a=='-'&&b=='#')
	return '>';	
	if(a=='/'&&b=='#')
	return '>';	
	if(a=='*'&&b=='#')//------#的判断 
	return '>';		
	if(b=='(')//ch扫描到(  就进栈 
	return '<';
	if(a=='('&&b=='+') //括号的判断 
	return '<';
	if(a=='('&&b=='-') 
	return '<';	
		if(a=='('&&b=='*') 
	return '<';
			if(a=='('&&b=='/') 
	return '<';
if(a=='+'&&b==')')
return '>';
if(a=='-'&&b==')')
return '>';
if(a=='*'&&b==')')
return '>';
if(a=='/'&&b==')')
return '>';//------------ 
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值