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

PTA 天梯赛 L7-20:表达式转换 ← 中缀 to 后缀

​【题目来源】
https://pintia.cn/problem-sets/15/exam/problems/type/7?problemSetProblemId=827

【题目描述】
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。

【输入格式】
输入在一行中给出不含空格的中缀表达式,可包含+、-、*、/以及左右括号(),表达式不超过20个字符。

【输出格式】
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。

【输入样例】
2+3*(7-4)+8/4

【输出样例】
2 3 7 4 - * + 8 4 / +

【数据范围】
中缀表达式长度≤20

【算法分析】
● 本题坑点一,在于区分 '-' 是减号还是负数符号,'+' 是加号还是正数符号。
● 本题坑点二,在于将 '.' 视为操作数,而不是操作符。及将其视为数字。

【算法代码】

#include <bits/stdc++.h>
using namespace std;map<char,int> pri= {{'(',0}, {')',0},{'+',1}, {'-',1},{'*',2}, {'/',2}
};bool isNum(char c) {return isdigit(c) || c=='.';
}//Determine whether it is a [positive/negative sign]
bool isSign(string s,int i,char c) {return (i==0 || s[i-1]=='(') && (c=='+' || c=='-');
}string getNum(string s,int &i) {string t;if(s[i]!='+') t+=s[i];while(i+1<s.size() && isNum(s[i+1])) {t+=s[i+1];i++;}return t;
}//Handle the right parenthesis
void procRight(vector<string> &v,stack<char> &op) {while(op.top()!='(') {v.push_back({op.top()});op.pop();}op.pop();
}//Handle operators
void procOP(char c,vector<string> &v,stack<char> &op) {while(!op.empty() && pri[c]<=pri[op.top()]) {v.push_back({op.top()});op.pop();}op.push(c);
}int main() {string s;cin>>s;vector<string> v;stack<char> op;for(int i=0; i<s.size(); i++) {if(isNum(s[i]) || isSign(s,i,s[i])) {v.push_back(getNum(s,i));} else if(s[i]=='(') op.push(s[i]);else if(s[i]==')') procRight(v,op);else procOP(s[i],v,op);}while(!op.empty()) {v.push_back({op.top()});op.pop();}for(int i=0; i<v.size(); i++) {if(i) cout<<" ";cout<<v[i];}return 0;
}/*
in:2+3*(7-4)+8/4
out:2 3 7 4 - * + 8 4 / +
*/




【参考文献】
https://blog.csdn.net/weixin_45962741/article/details/113698836


 

http://www.jsqmd.com/news/620359/

相关文章:

  • LoRA微调实战:如何用4GB显存跑通LLaMA-7B模型(附完整代码)
  • 5种信息获取技术工具:从原理到企业级应用的完整指南
  • 第二十九章 安全与合规:工业级 IT/OT 网络边界防护与数据防泄漏策略
  • Terminal 代理配置与 Claude Code 安装指南
  • Qt Modbus 协议上位机(Master)的优秀 GitHub 开源项目推荐
  • NLP 命名实体识别 API 接口
  • 做工商业储能贸易,怎么选适配性强的光伏储能柜供应商?
  • 中文文献管理终极指南:Jasminum插件如何让Zotero如虎添翼
  • 保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程
  • 知识自由的智能解决方案:突破内容限制的现代策略
  • Git不香了?DVC+Delta Lake+MLflow Versioning组合拳,实现模型-数据-代码原子级回滚
  • KMS_VL_ALL_AIO终极指南:3分钟实现Windows与Office智能激活
  • WechatDecrypt终极指南:4步快速破解微信数据库加密的技术原理与实践
  • 语义化获取站点 JSON 结构内容 API 接口
  • **发散创新:用Python+Pandas实现BI分析中的动态数据透视与可视化自动化**在
  • 微信DAT文件解密实战:从加密到可视化的完整指南
  • 你的 AI 焦虑,可能比 AI 本身更危险——ATM 机没有消灭银行柜员,但恐慌消灭了你的判断力
  • 5个维度解析开源工具Bypass Paywalls Clean:突破内容访问限制的完整方案
  • 差分运算放大器放大倍数计算的原理与实践解析
  • 2026年怎么搭建OpenClaw?云端4分钟新手教程及接入百炼APIKey流程
  • 终极指南:如何免费获取完美波斯语字体BehdadFont
  • 别再只盯着顶刊了!盘点5个AI领域里那些被低估的‘潜力股’SCI期刊(附投稿避坑指南)
  • R 4.5微生物组纵向分析必踩的4个时间序列陷阱:从DEICODE到mmvec,我们重跑了21项临床队列数据
  • Windows版Poppler:终极PDF处理工具安装与使用完整指南
  • CF1773I 猜阶乘 解题报告
  • 智能电子课本解析工具:破解教育资源获取难题的高效解决方案
  • 安卓sensor框架6-sensor—services
  • 低代码革命:是程序员的解放,还是末日的开端?
  • ArcGIS新手必看:用‘镶嵌至新栅格’搞定不同分辨率DEM的无缝拼接(附像素类型避坑点)
  • Storm-1175黑客组织在漏洞披露24小时内部署Medusa勒索软件