字符串输入进行四则运算输出题解

题目描述
输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。
输入描述: 输入一个算术表达式 如 3+2*{1+2*[-4/(8-6)+7]}
输出描述: 得到计算结果 输出 25

思路

  • 用两个栈分别存数字和运算符,根据符号优先级别判断栈内是否先计算。
  • 数字依次压入数字栈,符号栈压入之前先判断是否为括号;
    如果是括号:左括号压入,右括号则进行栈顶运算符的运算直到遇到左括号。如果是运算符,则判断优先级是否比栈顶符号高,如果是则压入,不是则先计算栈顶运算符号的运算,直到当前运算符优先级高于栈顶运算符;
  • 计算过程为数字栈弹出两个数,符号栈弹出一个运算符进行运算。

需注意的问题

  • 数字有可能带正负号, 需判断符号什么时候是运算符什么时候表示正负。
  • 对于符号:先判断左右括号,这样可以排除左右括号。则数字后面必是运算符号(因为不考虑左右括号了),
  • 刚开始时,遇到第一个数字之前的运算符号一定是表示正负号,数字之后才是运算符号,所以可以在数字赋值后面加个是否为要执行运算的运算符赋值。

代码如下:

#include <unordered_map>
#include <stack>
#include <iostream>
using namespace std;
void cal(stack<int> &num, stack<char> &opt) {
     //计算过程
	int b = num.top();
	num.pop();
	int a = num.top();
	num.pop();
	switch (opt.top())
	{
   
	case '+': {
   num.push(a + b); break; }//
	case '-': 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值