NYOJ 467 中缀式变后缀式
做了表达式求值那道题之后做的
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描写叙述
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式。关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供參看。这里不再赘述,如今你的任务是将中缀式变为后缀式。
输入
第一行输入一个整数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 <cstring>
#include <string>
#include <stack> using namespace std; int prio(char x)
{
if('+'==x || '-'==x)
return 1;
else if('*'==x || '/'==x)
return 2;
return 0;
} int main()
{
int n,i;
string s1,s2;
stack<char> s;
cin>>n;
while(n--)
{
cin>>s1;
s2="";
for(i=0,s.push('=');i<s1.length()-1;i++)
{
if('('==s1[i])
s.push(s1[i]);
else if(')'==s1[i])
{
while(s.top()!='(')
{
s2+=s.top();
s2+=' ';
s.pop();
}
s.pop();
}
else if('+'==s1[i] || '-'==s1[i] || '*'==s1[i] || '/'==s1[i])
{
while(prio(s.top())>=prio(s1[i])) //!!!这个地方easy把 prio(s1[i]) 写成 s1[i]
{
s2+=s.top();
s2+=' ';
s.pop();
}
s.push(s1[i]);
}
else
{
while(isdigit(s1[i]) || '.'== s1[i])
s2+=s1[i++];
i--;
s2+=' ';
}
}
while(s.top()!= '=')
{
s2+=s.top();
s2+=' ';
s.pop();
} s2+=s.top();
s.pop(); cout<<s2<<endl;
}
return 0;
}
NYOJ 467 中缀式变后缀式的更多相关文章
- nyoj 467 中缀式变后缀式 (栈)
中缀式变后缀式 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀 ...
- NYOJ467 中缀式变后缀式 【栈】
中缀式变后缀式 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更"习惯于"后缀式.关于算术 ...
- NYOJ--257--郁闷的C小加(一)(中缀表达式变后缀表达式 )
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...
- [Code] 中缀式转后缀式
[Code] 中缀式转后缀式 概要 对于一个可带括号的中缀四则运算表达式, 例如30 + 4 / 2 或 30 / ( 4 + 2 ), 下面代码将分别转换为对应的后缀表达形式 30 4 2 / + ...
- 中缀表达式变后缀表达式、后缀表达式(逆波兰)求值(python版本)
定义: 中缀表达式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表达式 后缀表达式: 又叫逆波兰表达式 ,不包含括号,运算符放在两个运算对象的后面,所有的计算 ...
- 栈的简单应用之中缀表达式转后缀表达式(C语言实现逆波兰式)
一.前言 普通人在书写计算式时会选择中缀表达式,这样符合人脑的认知习惯.可计算机处理时后缀表达式才能使处理速度更快,其原因是利用堆栈结构减少计算机内存访问.同时它也是一个很好锻炼栈这个数据结构的应 ...
- SDUT 2133 数据结构实验之栈三:后缀式求值
数据结构实验之栈三:后缀式求值 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是 ...
- SDUT-2133_数据结构实验之栈与队列三:后缀式求值
数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
随机推荐
- Maven配置浅析
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- 【采集层】Kafka 与 Flume 如何选择(转)
原文链接:[采集层]Kafka 与 Flume 如何选择 采集层 主要可以使用Flume, Kafka两种技术. Flume:Flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展 ...
- OpenCV学习(4) Mat的基本操作(1)
图像在OpenCV中都是通过Mat类来存储的,Mat可以用来表示N维矩阵,当然用的最多的还是二维矩阵. Mat类有两部分组成:第一部分是头信息,这些信息主要用来描述矩阵,比如矩 ...
- 数学图形(2.2)N叶结
上一节讲的三叶结,举一反三,由三可到无穷,这一节讲N叶结 再次看下三叶结的公式: x = sin(t) + 2*sin(2*t)y = cos(t) - 2*cos(2*t) 将其改为: x = si ...
- 会话追踪(session tracking)
HTTP是一种无连接的协议,如果一个客户端只是单纯地请求一个文件(HTML或GIF),服务器端可以响应给客户端,并不需要知道一连串的请求是否来自于相同的客户端,而且也不需要担心客户端是否处在连接状态. ...
- C# ?(问号)的三个用处
public DateTime? StatusDateTime = null; 脑子便也出现个问号,这是什么意思呢?网上搜下,总结如下: 1. 可空类型修饰符(?): 引用类型可以使用空引用表示一个不 ...
- js定义对象并赋值
1.可以通过 var ratio = {}; ratio.low = 70; ratio.high = 90; ratio.scale = 0.2; 2.可以通过 var obj = new Obj ...
- JobControl 的实现原理
本文地址:http://www.cnblogs.com/archimedes/p/hadoop-jobcontrol.html,转载请注明源地址. 引入实例:贝叶斯分类 贝叶斯分类是一种利用概率统计知 ...
- php stdClass 的使用
原文:http://www.php.cn/php-weizijiaocheng-371767.html ------------------------------------------------ ...
- 在第一段ionic示例的基础上增加底部导航
demo2.html <!DOCTYPE html> <html ng-app="app"> <head> <meta charset=& ...