博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中缀式变后缀式
阅读量:6793 次
发布时间:2019-06-26

本文共 1292 字,大约阅读时间需要 4 分钟。

中缀式变后缀式

时间限制:
1000 ms  |  内存限制:65535 KB
难度:
3
 
描述
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。
 
输入
第一行输入一个整数n,共有n组测试数据(n<10)。 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。 数据保证除数不会为0
输出
每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。
样例输入
21.000+2/4=((1+2)*5+1)/4=
样例输出
1.000 2 4 / + =1 2 + 5 * 1 + 4 / = 题解:简单模拟下就行了; 代码:
#include
#include
#include
#include
#include
#include
using namespace std;const int MAXN=1010;char s[MAXN];void getnum(int& i){ while(isdigit(s[i])||s[i]=='.'){ printf("%c",s[i++]); }}char work(char a,char b){ if(a=='#')return '<'; if(a=='+'||a=='-'){ if(b=='*'||b=='/'||b=='(')return '<'; else return '>'; } if(a=='*'||a=='/'){ if(b=='(')return '<'; else return '>'; } if(a=='('&&b==')')return '='; if(b==')')return '>'; return '<';}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%s",s); stack
S; S.push('#'); for(int i=0;s[i];){ if(isdigit(s[i])||s[i]=='.'){ getnum(i); printf(" "); } else{ switch(work(S.top(),s[i])){ case '<':S.push(s[i]);i++;break; case '>':printf("%c ",S.top());S.pop();break; case '=':S.pop();i++;break; } } } puts("="); } return 0;}

 

转载地址:http://hiogo.baihongyu.com/

你可能感兴趣的文章
设置ListView页眉注意事项
查看>>
ubuntu 更新出错
查看>>
nginx学习笔记(8)虚拟主机名---转载
查看>>
elasticsearch6 java 操作手册
查看>>
[LeetCode] Symmetric Tree
查看>>
jroo国际化实现方式
查看>>
【学习笔记3】解决struts2配置文件无提示问题
查看>>
设计模式学习笔记之单例模式(Java实现)
查看>>
hbase并发问题
查看>>
php下载文件
查看>>
Kurento Modules
查看>>
多种控制器的创建方式
查看>>
NSUserDefaults 简介,使用 NSUserDefaults 存储自定义
查看>>
IDEA_15构建SSM登录功能(1)
查看>>
Linux就是这个范儿
查看>>
基于JSTL自定义标签库
查看>>
hibernate里使用JDBC查询示例代码
查看>>
关闭tomcat命令窗体
查看>>
使用hive的常用命令语句
查看>>
Javascript 作用域和变量提升
查看>>