08 逆波兰式(耿 3.8)

该博客介绍了如何使用C语言将常规表达式转换为逆波兰式表达式。通过处理操作数、括号和运算符,特别是根据运算符的优先级进行判断,以确保正确转换。文中提供了一个简单的示例输入和期望的输出,并给出了完整代码来实现这个功能。
摘要由CSDN通过智能技术生成

题目

description
假设表达式由单字母变量和双目四则运算算符构成。试编写程序,将一个通常书写形式且书写正确的表达式转换为逆波兰式。
input
输入由单字母变量和双目四则运算算符构成的表达式。
output
输出其逆波兰式。
sample_input
(a+b)c
sample_output
ab+c

思路

逆波兰式,分为三种情况讨论,一是遇到操作数(字母)的处理,二是括号的处理,三是对运算符(+ - * /)的处理。

  1. 操作数
    直接弹出
  2. 括号
    前括号’(‘直接入栈,后括号’)‘则一直出栈栈顶元素,直到’('出栈
  3. 运算符
    判断优先级:
    若为除括号外的其它运算符,当优先级高于栈顶运算符时,直接入栈;
    否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到出现一个比它优先级低或者栈空为止。

    *、/的优先级高于+、-,同级别的或相等的运算符优先级相等。这里使用函数判断:
/*比较当前操作符a和栈顶元素b的优先级,是否弹出栈顶元素?1/0*/
int compare(char a, char b) {
    //compare(Op[i],optr[top])
	if ((a == '+' || a == '-') && (b == '/' || b == '*'))
		return 1;
	if ((a == '*' || a == '/') && (b == '+' || b == '-'))
		return 0;
	if ((a == '+' || a == '-') && (b == '+' || b == '-')
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值