郁闷的C小加(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

我们熟悉的表达式如a+b、a+b*(c+d)等都属于中缀表达式。中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2。同理,后缀表达式就是操作符在两个操作数之后:num1 num2 operand。ACM队的“C小加”正在郁闷怎样把一个中缀表达式转换为后缀表达式,现在请你设计一个程序,帮助C小加把中缀表达式转换成后缀表达式。为简化问题,操作数均为个位数,操作符只有+-*/ 和小括号。

 
输入
第一行输入T,表示有T组测试数据(T<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个表达式。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。并且输入数据不会出现不匹配现象。
输出
每组输出都单独成行,输出转换的后缀表达式。
样例输入
2
1+2
(1+2)*3+4*5
样例输出
12+
12+3*45*+

代码:

#include<stdio.h>
#include<string.h>
#include<stack>
#include<queue>
using namespace std; char str[];
int f(char a)
{
switch(a)
{
case '-' :
case '+' : return ; break;
case '/' :
case '*' : return ; break;
case '(' : return ; break;
default :return -;
}
} int main()
{
int T;
stack<char>sc;
queue<char>e;
scanf("%d",&T);
while(T--)
{
while(!e.empty())
e.pop();
while(!sc.empty())
sc.pop();
scanf("%s",str);
int len=strlen(str);
sc.push('#');
for(int i=;i<len;++i)
{
if(str[i]>=''&&str[i]<='')
{
e.push(str[i]);
}
else if(str[i]=='(')
{
sc.push(str[i]);
}
else if(str[i]==')')
{
while(sc.top()!='(')
{
e.push(sc.top());
sc.pop();
}
sc.pop();
}
else if(str[i]=='*'||str[i]=='/'||str[i]=='+'||str[i]=='-')
{
char s=sc.top();
while(f(str[i])<=f(s))
{
e.push(s);
sc.pop();
s=sc.top();
}
sc.push(str[i]);
}
}
while(!sc.empty())
{
e.push(sc.top());
sc.pop();
}
while(e.front()!='#')
{
printf("%c",e.front());
e.pop();
}
printf("\n"); }
return ;
}

467 代码:添加空格

代码:

#include<stdio.h>
#include<string.h>
#include<stack>
#include<queue>
using namespace std; char str[];
int f(char a)
{
switch(a)
{
case '-' :
case '+' : return ; break;
case '/' :
case '*' : return ; break;
case '(' : return ; break;
default :return -;
}
} int main()
{
int T;
stack<char>sc;
queue<char>e;
scanf("%d",&T);
while(T--)
{
while(!e.empty())
e.pop();
while(!sc.empty())
sc.pop();
scanf("%s",str);
int len=strlen(str);
sc.push('#');
for(int i=;i<len-;++i)
{
if(str[i]>=''&&str[i]<='')
{
if(!e.empty())
e.push(' ');
while(str[i]>=''&&str[i]<=''||str[i]=='.')
{
e.push(str[i]);
i++;
}
i--;
}
else if(str[i]=='(')
{
sc.push(str[i]);
}
else if(str[i]==')')
{
while(sc.top()!='(')
{
e.push(' ');
e.push(sc.top());
sc.pop();
}
sc.pop();
}
else if(str[i]=='*'||str[i]=='/'||str[i]=='+'||str[i]=='-')
{
char s=sc.top();
while(f(str[i])<=f(s))
{
e.push(' ');
e.push(s);
sc.pop();
s=sc.top();
}
sc.push(str[i]);
}
}
while(!sc.empty())
{
e.push(' ');
e.push(sc.top());
sc.pop();
}
while(e.front()!='#')
{
printf("%c",e.front());
e.pop();
}
printf("=\n"); }
return ;
}

nyoj-257 郁闷的C小加(一) 前缀表达式变后缀的更多相关文章

  1. NYOJ 257 郁闷的C小加(一) (字符串处理)

    题目链接 描述 我们熟悉的表达式如a+b.a+b(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2.同理,后缀表达式就是操作符 ...

  2. NYOJ 257 郁闷的C小加(一)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度: 描写叙述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说) ...

  3. nyoj 257 郁闷的C小加(一)(栈、队列)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  4. NYOJ 409 郁闷的C小加(三) (字符串处理)

    题目链接 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)"),C小加很高兴.但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值 ...

  5. NYOJ 267 郁闷的C小加(二) (字符串处理)

    题目链接 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)"),C小加很高兴.但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值 ...

  6. nyoj 409——郁闷的C小加(三)——————【中缀式化前缀后缀并求值】

    郁闷的C小加(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...

  7. NYOJ-267 郁闷的C小加(二)

    郁闷的C小加(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...

  8. 郁闷的C小加(一)(后缀表达式)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  9. NYOJ--257--郁闷的C小加(一)(中缀表达式变后缀表达式 )

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

随机推荐

  1. Ubuntu中设置环境变量详解

    1, 为单一用户:.bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.打开用户主目录下的.bashrc,在这个文件中加入export PA ...

  2. iOS中的堆(heap)和栈(stack)的理解

    操作系统iOS 中应用程序使用的计算机内存不是统一分配空间,运行代码使用的空间在三个不同的内存区域,分成三个段:“text segment “,“stack segment ”,“heap segme ...

  3. 从零开始学ios开发(八):Autorotation and Autosizing

    不好意思,这一篇间隔的时间有点长,最近实在是事情太多,耽搁了,好了,长话短说,下面继续学习ios. 这次学习的内容是Autorotation和Autosizing,Autorotation就是屏幕内容 ...

  4. iTween基础之Look(使对象面朝指定位置)

    一.基础介绍:二.基础属性 原文地址:http://blog.csdn.net/dingkun520wy/article/details/50578142 一.基础介绍 LookTo:旋转游戏对象使其 ...

  5. Configuring My Site in SharePoint 2010

    Configuring the User Profile Service in SharePoint 2010 http://sharepointgeorge.com/2010/configuring ...

  6. jquery-2.0.3.js和jquery-2.0.3.min.js的区别

    两个文件的作用是完全一样的. jquery-2.0.3.js里的代码是没有进行处理的原代码,适合于人们阅读与研究. jquery-2.0.3.min.js里的代码进行过特殊的处理, 如变量的名称基本都 ...

  7. select * from table where 1=1

    转自:http://www.dzwebs.net/2418.html 我们先来看看这个语句的结果:select * from table where 1=1,其中where 1=1,由于1=1永远是成 ...

  8. usb口外接了Com设备,U盘识别不了问题

    就如本题,当我usb口外接了Com设备时候,再插入U盘会出现识别不了的问题. 解决方法非常的简单,只要拨出这个com设备的usb就可以使用U盘了^_^

  9. ACCESS数据库C#操作类(包含事务)

    转自http://blog.csdn.net/allen3010/article/details/6336717 这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的 ...

  10. FACL的使用

    ACL的使用 ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一 ...