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

+-*/运算符优先级计算模板

acwing3302

知识点一:有关unordered_map的优先级

头文件<unordered_map>,然后进行符号优先级定义

定义方式unordered_map<char,int>pr{ {'+',1},{'-',1},{'*',2},{'/',2}};其余没定义的默认为0

知识点二:头文件<cctype>中的isdigit()是判断是否是数字的函数是则返回true

#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
#include<unordered_map>
using namespace std;
stack<int>num;
stack<int>op;
void eval(){auto b=num.top();num.pop();//第二个操作的数 auto a=num.top();num.pop();//第一个操作的数 auto c=op.top();op.pop();//运算符 int x;if(c=='+')x=a+b;else if(c=='-')x=a-b;else if(c=='*')x=a*b;else x=a/b;num.push(x);//结果 
}
int main(){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])){//例子(如果是12,那x=1,然后就是1×10加数字2)才得到数字12 x=x*10+str[j]-'0';j++;}i=j-1;//使得i指向2,i下一次++就是数字12的下一个位置 num.push(x);//把12入栈 }else if(c=='(')op.push(c);else if(c==')'){while(op.top()!='(')eval();//一直算到左括号 op.pop();//左括号出栈 }else{//待入栈运算符优先级低,则先计算 while(op.size()&&pr[op.top()]>=pr[c])eval(); //先判空 op.push(c);//操作符入栈}}while(op.size())eval();//剩余结果进行计算cout<<num.top()<<endl;//输出结果return 0;
}
//例子
//(1+2)*(2+3)
//先放入栈为op中【(+	num【1,2
//然后遇到)了开始执行eval弹出num使得b等于2,a等于1不能颠倒,op弹出+
//然后进行1+2=3,入栈变成num【3,再弹出(,op【 空了
//再op【*,(,+,num【3,2,3最后遇到)执行eval弹出num的b等于3,a等于2,op弹出+
//然后进行 2+3=5,入栈变成num【3,5然后进行剩余计算eval得出结果
//如果过程中有两个符号对碰,比如【*再进行+要入栈时,就会先执行eval把+先计算掉 

 例题:洛谷P10473

http://www.lryc.cn/news/526379.html

相关文章:

  • GPT 结束语设计 以nanogpt为例
  • FastDFS的安装及使用
  • C++ lambda表达式
  • react页面定时器调用一组多个接口,如果接口请求返回令牌失效,清除定时器不再触发这一组请求
  • Python的泛型(Generic)与协变(Covariant)
  • Python Typing: 实战应用指南
  • OpenEuler学习笔记(六):OpenEuler与其他Linux服务器的区别是什么?
  • 如何使用CRM数据分析和洞察来支持业务决策和市场营销?
  • MyBatis和JPA区别详解
  • SVN客户端使用手册
  • VsCode安装文档
  • 豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”
  • 【动态规划】--- 斐波那契数模型
  • 生信软件管家——conda vs pip
  • 代码随想录——串
  • 詳細講一下RN(React Native)中的列表組件FlatList和SectionList
  • TDengine 与上海电气工业互联网平台完成兼容性认证
  • 随机矩阵投影长度保持引理及其证明
  • 深度学习利用数据加载、预处理和增强数据提高模型的性能
  • ESP32服务器和PC客户端的Wi-Fi通信
  • 新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战
  • Spring MVC (三) —— 实战演练
  • 媒体新闻发稿要求有哪些?什么类型的稿件更好通过?
  • 【游戏设计原理】82 - 巴斯特原则
  • DDD架构实战第六讲总结:领域驱动设计中的聚合
  • vim如何设置自动缩进
  • C++入门14——set与map的使用
  • 单片机内存管理剖析
  • 【gopher的java学习笔记】Java中Service与Mapper的关系详解
  • 2025美赛B题完整代码+建模过程