XYNUOJ 2018: 中缀式变后缀式_韩顺平中缀转后缀-程序员宅基地

技术标签: XYNUOJ  ACM  信阳师范学院  数据结构  

2018: 中缀式变后缀式

时间限制: 1 Sec  内存限制: 64 MB
提交: 14  解决: 11
您该题的状态:已完成
[提交][状态][讨论版]

题目描述

人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。

输入

第一行输入一个整数n,共有n组测试数据(n<10)。 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。 数据保证除数不会为0

输出

每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。

样例输入

2
1.000+2/4=
((1+2)*5+1)/4=

样例输出

1.000 2 4 / + =
1 2 + 5 * 1 + 4 / =
#include<iostream>
#include<stack>
#include<string>
using namespace std;
string s,str;
int yxj(char ch)
{
	switch(ch)//判断运算符的优先级
	{
		case'+':
		case'-':
			return 1;
		case'*':
		case'/':
			return 2;
		default:
			return 0;
	}
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		cin>>s;
		stack<char>pq;
		pq.push('#');
		int len=s.size(),i=0;
		str.clear();//将栈清空
		while(i<len-1)//把等于号先剔除,最后再加上
		{
			if(s[i]=='(')//如果碰到左括号,将其放入栈内
			{
				pq.push(s[i]);
				i++;
			}
			else if(s[i]==')')//碰到右括号时,将右括号到左括号内的数字输出,不输出左括号
			{
				while(pq.top() !='(')
				{
					str+=pq.top();
					pq.pop();
					str+=' ';
				}
				pq.pop();
				i++;
			}
			else if(s[i]=='+'||s[i]=='-'||s[i]=='*'|s[i]=='/')//当碰到运算符号的时候,按优先级存入栈中
			{
				while(yxj(pq.top())>=yxj(s[i]))
				{
					str+=pq.top();
					str+=' ';
					pq.pop();
				}
				pq.push(s[i]);
				i++;
			}
			else
			{
				while(s[i]>='0'&&s[i]<='9'||s[i]=='.')//碰到数字时,将数字输出
				{
					str+=s[i];
					i++;
				}
				str+=' ';
			}
		}
		while(pq.top()!='#')//将栈中剩余的东西掏空
		{
			str+=pq.top();
			pq.pop();
			str+=' ';
		}
		str+='=';//最后加上等于号
		cout<<str<<"\n";
	}
	return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yxy602843889/article/details/81412130

智能推荐

java获取oracle数据,不使用科学计数法-程序员宅基地

1.项目采用spring mvc + mybatis + oracle 11g2.出现问题的实体类属性类型double,数据库中字段类型floag3.保存到数据库时,结果正常.(使用navicat直接查询得到的结果是正常的,如20000000)4.java代码中直接使用mybatis查询得到的结果是2.0E7这样的,可是我不想要这种科学计数法的,想要直接显示出来20000000这样..._spring查询oracle的大数避免科学计数法

上班族做什么副业好?适合上班族的去做的副业?_有什么比较靠谱适合上班族做的副业-程序员宅基地

适合上班族的去做的副业?在现实生活中,很多人的工作比较悠闲,这时很多人会找一些副业来做,让自己赚更多的钱。那么有很多空闲的时间的话,做什么副业比较好呢?你在实际生活中是如何选择的,下面我为大家总结了3个,也许有适合你的。1、自媒体写手目前情况:各大平台开放自媒体写手入驻已经有一段时间了,目前收益比较好的还是几个主流平台。我身边有不少朋友,业余运作单个平台的月收益就有3、5千;但由于国家政策监管力度加大,尤其是限制了一个身份证绑定一个账号,平台对优质内容的需求会越来越强,未来一定是内容的竞争。难点:做自_有什么比较靠谱适合上班族做的副业

通过反射解析json,无需依赖三方-程序员宅基地

本文只提供通过反射方式解析json方式,以及通过ParameterizedType获取泛型类型的实现方式,并非完整可用工具类!

阿里云CDN产品经理陈章炜:边缘创新技术和落地实践_cdn在部署边缘节点的时候采用什么样的方式方法能够快速部署和弹性伸缩?尤其是-程序员宅基地

CDN除了加速外,不断被赋予更多价值。在阿里云CDN推出的《极速奔跑吧 2021》首场直播中,阿里云架构师和产品经理不仅对近期阿里云发布的CDN产品最佳实践图进行了详细解读,还对CDN产品和客户的场景如何更高效地匹配、形成最优方案进行了分享,希望基于阿里巴巴及成功客户经验的分享,为客户2021年的企业数字化升级之路加码提速。本文整理自《边缘创新技术和落地实践》议题,介绍了边缘程序ER、QUIC这2个创新技术在前端渲染、小程序、短视频以及动态加速场景中的应用落地实践。分享嘉宾:阿里云产品经理陈章炜,负_cdn在部署边缘节点的时候采用什么样的方式方法能够快速部署和弹性伸缩?尤其是

使用idea开发Java的Wordcount程序并提交到spark集群运行_idea sparkcore wordcount java-程序员宅基地

首先,我们需要确保集群已搭建好,win10安装idea,打开idea,选择创建maven项目然后next,finish。工程打开后再pom.xml中添加依赖,选择启动导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" ..._idea sparkcore wordcount java

搭建Springboot+mybatis项目出现Invalid default: public abstract java.lang.Class org.mybatis.spring...问题解决-程序员宅基地

项目场景:自己练习搭建Springboot+mybatis项目,在完成后启动项目时,一直启动不起来,打开控制台发现有如下报错:报错信息为:java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class.org.mybatis.spring.annotation.MapperScan.factoryBean()解决方案:网上查询发现都是说在pom.xml中缺少如下依赖。但_invalid default: public abstract java.lang.class org.mybatis.spring.annotati

随便推点

Spring 的@RequestMapping注解-程序员宅基地

@RequestMappingRequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。RequestMapping注解有六个属性,下面我们把她分成三类进行说明。1、 value, method;value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);...

Hyper-V 3.0 - 在线快照合并-程序员宅基地

分类:Microsoft – Windows Server –Hyper-V原文来源:http://blogs.msdn.com/b/virtual_pc_guy/archive/2012/03/02/live-snapshot-merging-windows-server-8.aspx原文更新:N/A适用范围:Windows Serer 8 Beta在...

【算法竞赛-入门经典】圆柱体的表面积-程序员宅基地

1.练习目的:输入底面半径r和高h,输出圆柱体的表面积。2.源码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 5 int main() 6 { 7 const double pi =acos(-1.0); 8 ...

tp5带参路由跳转_tp5 路由跳转-程序员宅基地

1.模板标签内跳&lt;a href="{:url('cat/cat?cid={$vo.cid}')}"&gt;${arr[i]['category_name']}&lt;/a&gt;关于a标签带参数跳转:组合加替换生成最终标签进行跳转 最后用了模板字符串 ` `let url = "{:url('cat/cat',['cid'=&gt;'c_id'])}";let str =..._tp5 路由跳转

PB 生成和解析JSON格式数据_sailjson-程序员宅基地

一 创建用户对象sailjsonforwardglobal type sailjson from nonvisualobjectend typetype json_pair from structure within sailjsonend typeend forwardtype json_pair from structurestring nameany valueend typeglobal_sailjson

linux 快捷键-程序员宅基地

linux 快捷键**Tab 自动补全 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 Ctrl+k 删除此处至末尾的所有内容 Ctrl+u 删除此处至开始的所有内容 Ctrl+d 删除当前字符** Ctrl+h 删除当前字符前一个字符 Ctrl+w 删除此处到左边的单词 Ctrl+y 粘贴由Ctrl+u, Ctrl+d, Ctrl+w删除的单词

推荐文章

热门文章

相关标签