算术表达式的转换 栈

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

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c