用栈实现四则运算表达式(c++)

本文介绍了如何使用栈将中缀表达式转换为后缀表达式,并根据后缀表达式进行四则运算。通过遍历输入的中缀表达式,将数字直接压入栈,而运算符则根据优先级规则处理。对于后缀表达式的计算,通过遍历字符串,遇到数字压栈,遇到运算符则从栈中弹出两个元素进行运算并将结果压回栈。提供的C++代码实现了这一过程,适用于整数运算,不包含错误检查和浮点数支持。
摘要由CSDN通过智能技术生成

水平有限,花了两个小时实现了用栈进行基本的四则运算,只针对整数的运算。(即使两个整数相除也将得到整数)

思路:将输入的中缀表达式用栈转化为后缀表达式,再根据后缀表达式用栈实现运算。

中缀表达式:运算符位于运算数中间的表达式。如1+2,3*4
后缀表达式:运算符位于运算数后的表达式。如12+,34*

有中缀,有后缀,当然也有前缀。将中缀转换成前缀表达式然后进行计算与转换成后缀其实完全类似,这里只介绍后者。

(1)
先介绍用栈将中缀表达式转换成后缀表达式
1.建立两个栈 s1, s2.
2.遍历表达式字符串
3.若遇到数字,则直接压入s1
4.若遇到运算符(包括括号)
4(1)若s2为空,或s2栈顶为’(‘,则直接压入s2
4(2)若运算符比s2栈顶的运算符优先级高,则直接压入s2
4(3)若(1)(2)均不成立,则推出s2栈顶元素,将s2的栈顶元素压入s1,再回去进行(1)(2)两步骤
5.若遇到’(‘,则直接压入s2
6.若遇到‘)’,则将s2的元素推出并压入s1,直到s2栈顶出现’(‘,

(2)
根据后缀表达式计算
1.建立一个栈s
2.遍历后缀表达式字符串
3.遇到数字,则直接压入s
4.遇到运算符,则推出s的最上面两个数,根据运算符对两个数进行加减乘除,并将运算结果压回s
5.遍历结束后,最终结果就在栈s顶。

下面是c++代码的具体实现。该代码只是笔者为了练习和理解栈的概念所编写,只是最简单的实现,不包括检错报错和浮点数运算,水平有限,不要用于除研究以外的其他用途。

#include <stack>
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;
int compareOperatorPriority(char op1,char op2);
string getSuffixExpression(string str);
int calculate(string str);
bool isDigit(char c);
bool isOperator(char c);
int main(int argc, char const *argv[])
{
    /* code */
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值