算术表达式的转换 栈

2024-08-28 17:18
文章标签 转换 表达式 算术

本文主要是介绍算术表达式的转换 栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下。
因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢?小明很困惑。聪明的你帮他解决吧。

输入

输入一算术表达式,以\'#\'字符作为结束标志。(数据保证无空格,只有一组输入)

输出

输出该表达式转换所得到的前缀式 中缀式 后缀式。分三行输出,顺序是前缀式 中缀式 后缀式。

示例输入

a*b+(c-d/e)*f#

示例输出

+*ab*-c/def
a*b+c-d/e*f
ab*cde/-f*+
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
int bijiao(char a,char b)
{if(a=='*'||a=='/')return 1;else if((a=='+'||a=='-')&&(b=='+'||b=='-'))return 1;elsereturn 0;
}
int bijiao2(char a,char b)
{if((a=='*'||a=='/')&&(b=='+'||b=='-'))return 1;elsereturn 0;
}
int main()
{char str[200000],str2[200000],str3[200000];stack<char>q;scanf("%s",str);int len=strlen(str);int k=0;int j=len-1;while(str[j]!='#')j--;for(int i=j-1; i>=0; i--){str2[k++]=str[i];}str2[k++]='#';str2[k]='\0';len=strlen(str2);j=0;for(int i=0;i<len; i++){if(str2[i]>='a'&&str2[i]<='z'){str3[j++]=str2[i];}else if(str2[i]=='*'||str2[i]=='/'||str2[i]=='+'||str2[i]=='-'){if(q.empty()||q.top()==')')q.push(str2[i]);else{if (bijiao2(q.top(),str2[i])){str3[j++]=q.top();q.pop();q.push(str2[i]);}else{q.push(str2[i]);}}}else  if(str2[i]==')'||str2[i]=='('){if(str2[i]==')')q.push(str2[i]);else if(str2[i]=='('){while(q.top()!=')'){str3[j++]=q.top();q.pop();}if(q.top()==')')q.pop();}}else{while(!q.empty()){str3[j++]=q.top();q.pop();}}if(str2[i]=='#')break;}for(int i=j-1; i>=0; i--)cout<<str3[i];cout<<endl;for(int i=0; str[i]!='#'; i++){if(str[i]!='('&&str[i]!=')')cout<<str[i];}cout<<endl;len=strlen(str);while(!q.empty())q.pop();for(int i=0; i<len; i++){if(str[i]>='a'&&str[i]<='z'){cout<<str[i];}else if(str[i]=='*'||str[i]=='/'||str[i]=='+'||str[i]=='-'){if(q.empty()||q.top()=='(')q.push(str[i]);else{if (bijiao(q.top(),str[i])){cout<<q.top();q.pop();q.push(str[i]);}else{q.push(str[i]);}}}else  if(str[i]==')'||str[i]=='('){if(str[i]=='(')q.push(str[i]);else if(str[i]==')'){while(!q.empty()&&q.top()!='('){cout<<q.top();q.pop();}if(q.top()=='(')q.pop();}}else{while(!q.empty()){cout<<q.top();q.pop();}}if(str[i]=='#')break;}cout<<endl;return 0;
}

唉!!坑爹啊,我竟然忘了在前缀的时候需要重新定义比较错了n遍,orz

这篇关于算术表达式的转换 栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115389

相关文章

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

SpringBoot @Scheduled Cron表达式使用方式

《SpringBoot@ScheduledCron表达式使用方式》:本文主要介绍SpringBoot@ScheduledCron表达式使用方式,具有很好的参考价值,希望对大家有所帮助,如有... 目录Cron 表达式详解1. 表达式格式‌2. 特殊字符解析3. 常用示例‌4. 重点规则5. 动态与复杂场景‌

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma