算术表达式的转换 栈

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

相关文章

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的