中缀表达式转后缀表达式并计算

C++中缀表达式转后缀表达式并计算 关于后缀表达式的计算,参考了此链接,https://blog.youkuaiyun.com/creativele/article/details/81710049 栈的应用——四则运算表达式求值。 后缀表达式的优点是所有的符号都是在要运算数字的后面出现,例如简单表达式“1+2”,后缀表达式即为12+。 再如表达式“(3-1)x2”,其后缀表达式为31-2*。 再如表达式“9-3x2”,其后缀表达式为932*-。 中缀表达式转后缀表达式 规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部 阅读详情

使用vector容器来存储后缀表达式

#include<iostream>
#include<stack>
#include<string>
#include<vector>
#include<unordered_map>
using namespace std;
stack<char> op;//存储运算符
stack<int> num1;//存储数字
vector<string> num;//用来存储后缀表达式
int eval(string s4)
{
	int x, y;
	x = num1.top();
	num1.pop();
	y = num1.top();
	num1.pop();
	if (s4 == "+") return x + y;
	else if (s4 == "-")return x - y;
	else if (s4 == "*") return x * y;
	else if (s4 == "/") return x / y;
}
int main()
{
	//vector<string> num;
	unordered_map<char, int> pr{ {'+',1},{'-',1},{'*',2},{'/',2} };
	string str;
	cin >> str;
	for (int i = 0; i < str.size(); ++i)
	{
		auto c = str[i];
		if (isdigit(c))
		{
			int x = 0, j = i;
			while (j < str.size() && isdigit(str[j]))
				x = x * 10 + str[j++] - '0';
			i = j - 1;
			string s = to_string(x);
			num.push_back(s);
		}
		else if (c == '-' || c == '+' || c == '*' || c == '/')
		{
			while (!op.empty() && pr[c] <= pr[op.top()])//若栈顶元素大于等于新的运算符,则出栈
			{
				string s1 = "";
				s1 = s1 + op.top();
				num.push_back(s1);
				op.pop();
			}
			op.push(c);//进栈
			/*if (op.empty() || pr[c] > pr[op.top()])
			{
				op.push(c);
			}*/
		}
		else if (c == '(')//左括号直接入栈
		{
			op.push(c);
		}
		else if (c == ')')//若是右括号则弹出所有在左括号上面的运算符
		{
			//int j1 = i;
			while (op.top() != '(')
			{
				string s2 = "";
				s2 = s2 + op.top();
				num.push_back(s2);
				op.pop();
			}
			op.pop();
		}

	}
	if (!op.empty())//栈中还存在运算符则移至vector<string>
	{
		while (!op.empty())
		{
			string s3 = "";
			s3 = s3 + op.top();
			num.push_back(s3);
			op.pop();
		}
	}
	//后缀表达式计算
	for (int k = 0; k<num.size(); k++)
	{
			if (num[k].size() > 1)//若是两位以上的数字
			{
				int x1 = 0;
				for (auto c1 : num[k])
				{
					x1 = x1 * 10 + c1 - '0';
				}
				num1.push(x1);
			}
			else //if (num[k] == "-" || num[k] == "+" || num[k] == "*" || num[k] == "/")
			{
				for (auto c2 : num[k])//判断是以为数字还是运算符
				{
					if (isdigit(c2))//若是一位数字
					{
						num1.push(c2-'0');
					}
					else
					{
						num1.push(eval(num[k]));
					}
					break;
				}
				//num1.push(eval(num[k]));
			}
	}
	cout << num1.top();//输出结果
	return 0;
}
中缀表达式转后缀表达式并计算、判断中缀表达式是否合法 中缀转后缀思想: 运算符的优先级: 运算符 级别(数字越大优先级越高) ( 1 +、- 2 *、/ 3 ) 4 扫描字符串,如果字符串是0~9的数字,添加到结果字符串中,如果是运算符,则进行一下判断:(运算符栈mvstack,结果字符串res) 如果运算符是‘+’、‘-’,‘*’,‘/’, mvstack为空,直接加进栈内, mvstack不为空。将栈内所有比带加... 阅读详情

相关推荐

论文地图合规求生指南:5分钟搞定标准地图服务转ArcGIS可用矢量文件

本文提供了一份论文地图合规求生指南,帮助非GIS专业背景的科研人员在5分钟内将标准地图服务的EPS文件转换为ArcGIS兼容的矢量文件。通过详细的工作流程和关键参数设置,确保地图完全符合国家规范,同时节省时间成本。重点关注标准地图服务的合规性和Shapefile转换技巧,适用于紧急情况下的论文地图处理。

weixin_34233974的博客 401

中缀表达式转后缀表达式并计算,C语言实现

作为我们最熟悉的表达式1+1而言,你是否知道其还被称为中缀表达式?提示:以下是本篇文章正文内容,下面案例可供参考以上就是我对于中缀表达式转后缀表达式的理解。!!!!

li209779的博客 5573

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 386

c++ 中缀表达式转后缀表达式并计算值

什么是中缀表达式, 前缀表达式, 后缀表达式? 在数据结构中, 二叉树的遍历有三种(这里不考虑分层遍历等特殊需求): 前序遍历, 中序遍历和后序遍历. 如果将表达式看做一颗二叉树, 那么中缀表达式, 前缀表达式和后缀表达式就是这三种遍历的结果.算数表达式本身就是中缀表达式, 也就是二叉树中序遍历的结果. 关于表达式二叉树是以运算符为根, 运算值为左右叶子. 例如表达式: 2 * 5 + 6 *

lbcab的博客 1万+

RC4加密算法详解

RC4(也称为 Rivest Cipher 4)是流密码的一种形式,流密码逐字节操作数据流。RC4 流密码是使用最广泛的流密码之一,它通过算法一次一个字节地加密消息,简单并且操作速度快。RC4是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权的用户才能享受该服务,使用 64 位或 128 位密钥大小。它通常用于安全套接层 (SSL)、传输层安全 (TLS) 等应用,也用于 IEEE 802.11 无线 LAN 标准。在存储大量的信息时,RC4展现出它的实用性,面对大量的数据,

weixin_43211186的博客 1万+

别再折腾虚拟机了!手把手教你用WSL2在Windows 11上安装Kali Linux(含汉化与图形界面)

本文详细介绍了如何在Windows 11上通过WSL2安装和配置Kali Linux,包括汉化与图形界面设置。通过WSL2,用户可以享受接近原生性能的Linux体验,同时保持与Windows系统的无缝集成,特别适合网络安全爱好者和开发者。文章还提供了常见问题解决和性能优化建议,帮助用户高效使用Kali工具集。

weixin_42525369的博客 322

中缀表达式转后缀表达式 java_中缀表达式转后缀表达式并计算结果Java实现

/*中缀表达式转成后缀表达式 "12+((22+31)*4)-5" ==> 12 22 31 + 4 * + 5 -第一步,将中缀表达式转成中缀字符串list,方便遍历 [12, +, (, (, 22, +, 31, ), *, 4, ), -, 5]第二步,将中缀字符串list转成后缀表达式对应的list [12, +, (, (, 22, +, 31, ), *, 4, ), -, 5...

weixin_33304092的博客 292

Autosar_MCAL_Port

PORT Driver就是对微控制器(MCU)的整个PORT模块进行初始化配置。很多端口和管脚被分配有多种不同的功能,即可以进行引脚功能复用,比如通用I/O、adc、pwm、spi等功能。因此,对PORT必须有一个整体的配置和初始化,对各管脚的具体配置和使用取决于微控制器和ECU的引脚功能分配。PORT初始化数据应当尽可能高效地写到每个端口。DIO驱动中所用到的端口的配置和初始化都是在PORT驱动模块中完成的。因此,在使用DIO功能之前,应先进行PORT的初始化。1、PortContainer说明。

不断debug,优化中…… 238

C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现

1.在本项目拟采用顺序栈来实现。 顺序栈的存储定义 typedef struct stack { SElemType *base;//栈底指针 SElemType *top;//栈顶指针 int stacksize;//栈分配的存储空间大小 }SqStack; 2.主要功能函数设计及算法描述 (1)初始化栈 算法描述:初始化空栈,包括顺序栈存储单元的分配等。 void Ini...

MistyWood的博客 2012

OPTEE:TA命令操作的实现(三)

上文我们创建好了通道,现在就是操作,怎么操作TA呢?REE侧的CA执行创建会话操作成功后,CA就可使用获取到的调用来让TA执行特定的命令。通过ioctl的系统调用发送到OP-TEE的驱动中,保存在共享内存中,并触发安全监控模式调用(smc)切换到Monitor模式(ARMv7)或EL3(ARMv8)中进行安全世界状态的处理。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1267

【学习系列】SAP RAP 20:Unmanaged场景开发示例-调用BAPI、BAPI包装类、BO接口创建标准采购订单

本文介绍了在SAP RAP(Restful ABAP Programming)框架下,通过三种方式实现采购订单创建的方案。首先分析了RAP框架对传统BAPI调用的限制,特别是禁止显式COMMIT语句的要求。随后详细阐述了三种实现方式:1)直接调用传统BAPI(仅支持OP环境);2)使用BAPI包装类(仅支持OP环境);3)调用标准业务对象接口(支持所有环境)。 文章重点说明了在unmanaged场景下的技术实现细节,包括字段控制、缓冲区管理、测试运行与实际调用的分离处理等。针对每种方式都提供了完整的实施步骤

DeveloperMrMeng的博客 597

java中缀表达式转后缀表达式_中缀表达式转后缀表达式并计算结果Java实现

/*中缀表达式转成后缀表达式 "12+((22+31)*4)-5" ==> 12 22 31 + 4 * + 5 -第一步,将中缀表达式转成中缀字符串list,方便遍历 [12, +, (, (, 22, +, 31, ), *, 4, ), -, 5]第二步,将中缀字符串list转成后缀表达式对应的list [12, +, (, (, 22, +, 31, ), *, 4, ), -, 5...

weixin_42126749的博客 284

YOLOv9 损失函数解析

YOLOv9作为YOLO系列的最新成员,在损失函数设计上进行了多项创新,重点优化了动态任务对齐机制、多模态定位损失融合以及跨层级梯度协同,进一步提升了检测精度与训练效率。

浩瀚之水的专栏 1292

c++中缀表达式转后缀表达式并计算

#include #include using namespace std; //栈内优先级 int isp(char a) { switch (a) { case '+': case '-': return 3; case '*': case '/': return 5;

stack_over的博客 553

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【数据结构】BOJ-1.B中缀表达式转后缀表达式并计算

没有题目了 懂得都懂 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef char ElemType; typedef struct SNode { ElemType Element; struct SNode* Next; }*Stack; typedef struct SNodenum { float Element; struct SNodenum*

weixin_46101687的博客 149

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

中缀表达式转后缀表达式并进行计算 原理

在计算一个表达式的时候,可以用数据结构中栈的知识,将我们平常熟悉的中缀表达式转为后缀表达式,再将后缀表达式进行计算得到结果。先说下什么是中缀什么是后缀: 中缀表达式:eg: 9+(3-1)*3+10/2,就是我们平常计算时的表达式; 后缀表达式:eg: 9 3 1 - 3 * + 10 2 / + ,不包含括号,运算符在两个运算对象后面的表达式。 1.中缀表达式转后缀表达式 我们先初始化一...

sdr_zd的博客 4845

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

栈实现中缀表达式转后缀表达式并计算

后缀表达式中缀表达式转后缀表达式后缀表达式的计算 中缀表达式转后缀表达式 后缀表达式: 所有的符号都是在要计算的数字后面,并且没有括号。 规则: 从左到右遍历中缀表达式每个数字和符号,若是数字就输出,若是符号,则判断其与栈顶符号的优先级,是右括号或优先级不高于栈顶符号(乘除优先加减),则栈顶元素依次出栈并输出,并将当前符号进栈。 判断优先级 int prio(char op){ int priority; if(op=='*'||op=='/') priority=2; if(op=='+'||op=

xoxcu的博客 448

中缀表达式转后缀表达式,并计算后缀表达式的值

C语言,注释拉满,萌新慎入,因为作者也是萌新。欢迎大佬指正,代码不足之处请多包含。

qq_66537373的博客 1281

中缀表达式转后缀表达式,并计算结果(java)

后缀表达式的计算机求值过程:(== 逆波兰表达式==) 从左至右扫描表达式,遇到数字时,就将数字压入栈中,遇到运算符时,就弹出栈顶的两个数字,用运算符对它们做相应的计算(次顶元素和栈顶元素),并将结果入栈;重复上述过程,直到表达式的最右端,最后运算得到的值就是表达式的结果 例:(3+4)×5-6对应的后缀表达式为 3 4 + 5 × 6,针对后缀表达式求值步骤如下: ①从左至右扫描,将3和4压入栈中; ②遇到运算符 + ,因此弹出 4 和 3(4 为栈顶元素, 3 为次顶元素),计算 3 + 4 的值,得到

LX__Mr的博客 1220

中缀表达式转后缀表达式并输出计算结果

后缀表达式又称逆波兰表达式,明显的特点是:逆波兰表达式中没有括号,计算时将操作符之前的第一个数作为右操作数,第二个数作为左操作数,进行计算,得到的值继续放入逆波兰表达式中。    但日常生活中我们总是习惯于写中缀表达式,所以需要先将中缀表达式转为后缀表达式。    假如中缀表达式为:12*(3+4)-6+8/2    在遇到数字时,我们直接输出,遇到符号,则入栈。但在入栈时,我们要判断栈内已有

心之所向,一如既往 2万+

【数据结构】中缀表达式转后缀表达式并计算

中缀转后缀算法 对于数字:直接输出 对于符号: 左括号:进栈 运算符号:与栈顶符号优先级比较 若栈顶符号优先级低,符号进栈(默认栈顶若是左括号 左括号优先级最低) 若栈顶优先级不低,将栈顶符号弹出,之后进栈 右括号:将栈顶符号弹出并输出,直到匹配到左括号 遍历结束:栈中所有符号弹出并输出 计算后缀表达式算法 遍历表达式的数字和符号 对于数字:进栈 对于符号: 从栈中弹出右操作数 从栈中...

xuehu96的博客 623

Java实现中缀表达式转后缀表达式并计算结果

栈中缀表达式就是形如a(b-c)+d*这样我们平常写的式子,如果按平时逻辑上的处理顺序的话计算机比较难正确处理,因为运算符之间有优先级,括号的优先级比乘除高,乘除的优先级比加减高,这是小学的知识。 如果利用栈的先进后出(First In Last Out)的特性,可以将中缀表达式转为后缀表达式。 后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(

dgeek的博客 1万+
下一篇: 数据库入门笔记(基础篇)
crazy library
博客等级 码龄5年 7粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值