当前位置: 首页 > news >正文

⌈C++11⌋实现一个简易计算器

 原理:

数据栈:有数据就直接入栈

运算符栈:设遍历到当前的运算符位e,如果栈不为空,比较栈顶与当前运算符优先级e,当栈顶运算符优先级大于或者等于e的优先级,则出栈,并将两个数据栈的数据出栈,计算出对应的数据,加入到数据栈中,否则将运算符入栈

#include <iostream>
#include <unordered_map>
#include <stack>
#include <functional>
#include <string>#define MAX_PRI INT_MAXusing namespace std;
int main() {//数据栈stack<double> _data;   //运算符栈stack<char> _operator;   //运算符优先级unordered_map<char, int> pri{ {'+', 0}, {'-', 0}, {'*', 1}, {'/', 1}, {'^', 2}, {'(', MAX_PRI }, {')', MAX_PRI}};unordered_map<char, function<double(double, double)>> func{{'+', [](double x, double y) -> double { return x + y; }},{'-', [](double x, double y) -> double { return x - y; }},  {'*', [](double x, double y) -> double { return x * y; }},{'/', [](double x, double y) -> double { return x / y; }},{'^', [](double x, double y) -> double { return pow(x, y); }}};string exp;cin >> exp;auto calculate = [&_data, &_operator, &func]() {char op = _operator.top();_operator.pop();double x = _data.top();_data.pop();double y = _data.top();_data.pop();_data.push(func[op](y, x));   //运算顺序与出栈顺序相反};auto stringtonum = [&exp, &pri](int& i) -> double {int j = i + 1;while (j < exp.length() && pri.find(exp[j]) == pri.end()) j++;double num = stod(exp.substr(i, j - i));i = j - 1;   return num;};for (int i = 0; i < exp.length(); ++i) {char e = exp[i];if (pri.find(e) == pri.end()) {   //当前字符不是运算符,则切割数字_data.push(stringtonum(i));} else if (e == '(') {_operator.push('(');} else if (e == ')') {while (_operator.top() != '(') {calculate();}_operator.pop();} else {//当前运算符优先级<=栈顶运算符优先级,则出栈计算while (!_operator.empty() && pri[_operator.top()] >= pri[e] && _operator.top() != '(') {calculate();}_operator.push(e);}}while (!_operator.empty()) {calculate();}cout << _data.top() << endl;
}

相关文章:

⌈C++11⌋实现一个简易计算器

原理&#xff1a; 数据栈&#xff1a;有数据就直接入栈 运算符栈&#xff1a;设遍历到当前的运算符位e&#xff0c;如果栈不为空&#xff0c;比较栈顶与当前运算符优先级e&#xff0c;当栈顶运算符优先级大于或者等于e的优先级&#xff0c;则出栈&#xff0c;并将两个数据栈的…...

面试算法45:二叉树最低层最左边的值

题目 如何在一棵二叉树中找出它最低层最左边节点的值&#xff1f;假设二叉树中最少有一个节点。例如&#xff0c;在如图7.5所示的二叉树中最低层最左边一个节点的值是5。 分析 可以用一个变量bottomLeft来保存每一层最左边的节点的值。在遍历二叉树时&#xff0c;每当遇到新…...

Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.21.

前两天下了一个demo&#xff0c;运行时候报了一个这样的错&#xff0c;特此记录一下。 先看下报的错。 Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.21. Searched in the following…...

LoRaWan之LoRaMAC 的快速入门指南

概述 本快速入门指南简要介绍了 LoRaMAC 层的重要操作。示例部分提供了不同设备类别的完整示例。 初始化 LoRaMAC层的初始化函数是LoRaMacInitialization( LoRaMacPrimitives_t *primitives, LoRaMacCallback_t *callbacks, LoRaMacRegion_t region )。该函数具有三个参数:L…...

中国教育企业出海 新兴技术助力抢占先机

继游戏、电商、短视频等领域轮番出海之后&#xff0c;国内教育企业纷纷开启了出海之路。近日发布的《2023年教育应用出海市场洞察》报告显示&#xff0c;在中国教育企业出海市场中&#xff0c;语言学习是最主要的赛道&#xff0c;但赛道竞争更为激烈。 报告指出&#xff0c;全…...

IntelliJ IDEA2023旗舰版和社区版下载安装教程(图解)

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

【RxJava】map过程中各个Observable生命周期分析

map和flatMap的区别 首先说下map和flatMap的区别&#xff0c;防止有对RxJava还不够熟悉的小伙伴 map的Function指定如何将A转为BflatMap的Function则指定如何将Observable<A>转为Observable<B>map和flatMap最终的转换结果都是Observable<B>flatMap由于可以…...

vue 获取上一周和获取下一周的日期时间

效果图&#xff1a; 代码 <template><div><div style"padding: 20px 0;"><div style"margin-left: 10px; border-left: 5px solid #0079fe; font-size: 22px; font-weight: 600; padding-left: 10px">工作计划</div><di…...

线性代数 第四章 线性方程组

一、矩阵形式 经过初等行变换化为阶梯形矩阵。当&#xff0c;有解&#xff1b;当&#xff0c;有非零解。 有解&#xff0c;等价于 可由线性表示 克拉默法则&#xff1a;非齐次线性方程组中&#xff0c;系数行列式&#xff0c;则方程组有唯一解&#xff0c;且唯一解为 其中是…...

@DateTimeFormat和@JsonFormat注解

在日常开发中&#xff0c;有用到时间类型作为查询参数或者查询结果有时间参数的一般都会见过这两个注解。 DateTimeFormat(pattern “yyyy-MM-dd HH:mm:ss”)注解用于解析请求接口入参。将入参的字符串按照pattern设置的格式来转换成日期时间对象。 JsonFormat(timezone “G…...

做抖音短视频会经历哪些阶段?

今天来聊聊那些在抖音做大的老板&#xff0c;从开始到后期经历的四个阶段&#xff0c;以及每个阶段的工作重心 1、0—1的阶段 0—1的起步阶段是整个阶段最有难度的一环&#xff0c;很多人对0到1的认知是有错误的&#xff0c;以为爆过几条视频就已经进阶了 想要实现0-1的突破…...

【Mquant】2、量化平台的选择

文章目录 一、选择因素二、常见的量化平台三、为什么选择VeighNa&#xff1f;四、参考 一、选择因素 功能和工具集&#xff1a;量化平台应该提供丰富的功能和工具集&#xff0c;包括数据分析、策略回测、实时交易等。不同的平台可能有不同的特点和优势&#xff0c;可以根据自己…...

iPhone手机如何恢复删除的视频?整理了3个好用方法!

在日常生活中&#xff0c;我们会把各种各样的视频存放在手机里。这些视频记录着我们生活中的点点滴滴&#xff0c;每一帧都承载着珍贵的记忆。但如果我们不小心将这些重要视频删除了该怎么办&#xff1f;如何恢复删除的视频&#xff1f;本文将以iPhone手机为例子&#xff0c;教…...

全网最全的RDMA拥塞控制入门基础教程

RDMA-CC&#xff08;全网最全的RDMA拥塞控制入门基础教程&#xff09; 文章目录 RDMA-CC&#xff08;全网最全的RDMA拥塞控制入门基础教程&#xff09;DMARDMARDMA举例RDMA优势RDMA的硬件实现方法RDMA基本术语FabricCA&#xff08;Channel Adapter&#xff09;Verbs 核心概念Me…...

分布式消息队列:RabbitMQ(1)

目录 一:中间件 二:分布式消息队列 2.1:是消息队列 2.1.1:消息队列的优势 2.1.1.1:异步处理化 2.1.1.2:削峰填谷 2.2:分布式消息队列 2.2.1:分布式消息队列的优势 2.2.1.1:数据的持久化 2.2.1.2:可扩展性 2.2.1.3:应用解耦 2.2.1.4:发送订阅 2.2.2:分布式消息队列…...

Redis集群脑裂

1. 概述 Redis 集群脑裂&#xff08;Cluster Split Brain&#xff09;是指在 Redis 集群中&#xff0c;由于网络分区或通信问题&#xff0c;导致集群中的节点无法相互通信&#xff0c;最终导致集群内部发生分裂&#xff0c;出现多个子集群&#xff0c;每个子集群认为自己是有效…...

GEE教程——随机样本点添加经纬度信息

简介: 有没有办法在绘制散点图后将样本的坐标信息(纬度/经度)添加到.CSV表格数据中? 这里我们很多时候我们需要加载样本点的基本信息作为属性,本教程主要的目的就是我们选取一个研究区,然后产生随机样本点,然后利用坐标函数,进行样本点的获取经纬度,然后通过循环注意…...

PyTorch入门学习(十):神经网络-非线性激活

目录 一、简介 二、常见的非线性激活函数 三、实现非线性激活函数 四、示例&#xff1a;应用非线性激活函数 一、简介 在神经网络中&#xff0c;激活函数的主要目的是引入非线性特性&#xff0c;从而使网络能够对非线性数据建模。如果只使用线性变换&#xff0c;那么整个神…...

《golang设计模式》第三部分·行为型模式-03-解释器模式(Interpreter)

文章目录 1. 概述1.1 角色1.2 类图1.3 优缺点 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 解释器模式&#xff08;Interpreter&#xff09;是用于表达语言语法树和封装语句解释&#xff08;或运算&#xff09;行为的对象。 1.1 角色 AbstractExpression&#xff08;抽象表…...

Windows个性化颜色睡眠后经常改变

问题再现 我把系统颜色换成了一种红色&#xff0c;结果每次再打开电脑又变回去了&#xff08;绿色&#xff09;&#xff1b; 原因是因为wallpaper engine在捣蛋 需要禁用修改windows配色这一块选项&#xff1b; 完事&#xff01;原来是wallpaper engine的问题&#xff1b;...

英特尔Linux处理器微码更新:保障系统安全与稳定的关键指南

英特尔Linux处理器微码更新&#xff1a;保障系统安全与稳定的关键指南 【免费下载链接】Intel-Linux-Processor-Microcode-Data-Files 项目地址: https://gitcode.com/gh_mirrors/in/Intel-Linux-Processor-Microcode-Data-Files Intel Linux Processor Microcode Data…...

Java PPT自动化:从数据到演示文稿的智能生成

1. 为什么需要Java PPT自动化&#xff1f; 想象一下这样的场景&#xff1a;每周五下午&#xff0c;市场部的同事都会准时发来一封邮件&#xff0c;要求你根据本周的销售数据生成一份PPT报告。数据来自CRM系统&#xff0c;包含几十个SKU的销售额、增长率、区域分布等信息。你需要…...

LFM2.5-1.2B-Thinking-GGUF精彩案例:100字产品介绍生成质量实测分享

LFM2.5-1.2B-Thinking-GGUF精彩案例&#xff1a;100字产品介绍生成质量实测分享 1. 模型简介与测试背景 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的一款轻量级文本生成模型&#xff0c;特别适合在资源有限的环境中快速部署和使用。这款模型采用了GGUF格式和llama.cpp运行时…...

Qwen3-4B-Thinking-2507:轻量级AI推理模型的3大突破性技术革命

Qwen3-4B-Thinking-2507&#xff1a;轻量级AI推理模型的3大突破性技术革命 【免费下载链接】Qwen3-4B-Thinking-2507-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-4B-Thinking-2507-GGUF 在AI模型参数规模持续膨胀的今天&#xff0c;Qwen3-4B-Thi…...

nlp_structbert_sentence-similarity_chinese-large 效果展示:中文文本相似度计算精准度测评

nlp_structbert_sentence-similarity_chinese-large 效果展示&#xff1a;中文文本相似度计算精准度测评 最近在做一个智能客服的项目&#xff0c;需要判断用户提问和知识库答案的匹配度。试了好几个开源模型&#xff0c;效果总是不太理想&#xff0c;要么把意思完全相反的句子…...

计算机毕业设计springboot社区物业管理系统 基于SpringBoot的智慧社区综合服务平台 基于SpringBoot的小区数字化运营管理系统

计算机毕业设计springboot社区物业管理系统59b07osb &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 在快速城市化的今天&#xff0c;社区物业管理作为城市生活的重要组成部分&a…...

爱毕业aibiye的AI论文助手提供智能降重及语言优化功能,有助于显著提升论文的原创水平

开头总结工具对比&#xff08;技能4&#xff09; &#xfffd;&#xfffd; 为帮助学生们快速选出最适合的AI论文工具&#xff0c;我从处理速度、降重效果和核心优势三个维度&#xff0c;对比了6款热门网站&#xff0c;数据基于实际使用案例&#xff1a; 工具名称 处理速度 降…...

深入理解RAC中的gc buffer busy:从原理到避坑指南

深入解析RAC中的gc buffer busy&#xff1a;原理剖析与实战优化 在Oracle RAC环境中&#xff0c;gc buffer busy等待事件是影响性能的常见瓶颈之一。不同于单机数据库中的buffer busy waits&#xff0c;这一现象直接反映了集群环境下多实例间数据块协同访问的复杂性。本文将带您…...

Qwen3-4B内存优化技巧:如何让4B模型跑得更快更稳

Qwen3-4B内存优化技巧&#xff1a;如何让4B模型跑得更快更稳 1. 为什么需要优化Qwen3-4B的内存使用&#xff1f; 运行大型语言模型时&#xff0c;内存管理往往是决定性能的关键因素。对于Qwen3-4B这样的4B参数模型&#xff0c;未经优化的内存使用可能导致&#xff1a; 推理速…...

如何实现Unitree Go2远程控制:OM1的机器人远程操控实践指南

如何实现Unitree Go2远程控制&#xff1a;OM1的机器人远程操控实践指南 【免费下载链接】OM1 Modular AI runtime for robots 项目地址: https://gitcode.com/GitHub_Trending/om/OM1 你是否曾想过在办公室就能指挥家里的Unitree Go2机器人巡逻&#xff1f;或者在外出时…...