郁闷的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. Bash 快捷键

     生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向 ...

  2. 【python】 入门 - 函数式编程

    函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数 http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8b ...

  3. 微软职位内部推荐-SDE2 (Windows - Audio)

    微软近期Open的职位: SDE2 (Windows - Audio) Windows Partner Enablement team in Operating System Group is loo ...

  4. 微软职位内部推荐-Senior Software Development Engineer

    微软近期Open的职位: Job posting title: Senior Software Development Engineer Location: China, Beijing Divisi ...

  5. ibatis.net demo

    1. download ibatis.nethttps://code.google.com/p/mybatisnet/ 2. add all dll as reference to your proj ...

  6. Qt中使用Firebird 和 Firebird Embedded

    编译数据库连接插件 拷贝ibase.h,fbclient_ms.lib(改名gds32_ms.lib)等到ibase.pro项目文件夹下 configure -platform win32-msvc2 ...

  7. oracle里如何将两个日期的时间差返回**时**分的格式

    SELECT EXTRACT(DAY FROM (sysdate-to_date('2012-03-29 00:00:00','YYYY-MM-DD HH24:MI:ss')) DAY TO SECO ...

  8. P1676陶陶吃苹果 - vijos

    描述 curimit知道陶陶很喜欢吃苹果.于是curimit准备在陶陶生日的时候送给他一棵苹果树. curimit准备了一棵这样的苹果树作为生日礼物:这棵苹果树有n个节点,每个节点上有c[i]个苹果, ...

  9. 【BZOJ】【3275】Numbers

    网络流/最小割 Orz了Jiry_2神犇,蒟蒻网络流建模什么的完全不会啊T_T 按奇偶性来分组实在太巧妙了……然后相关的点之间连边表示只能选其一,来求最小割…… /****************** ...

  10. 被遗忘的Android mipmaps简介

    被遗忘的 Android mipmaps 简介 [导读]已经发布的 Android Studio1.1 版本是一个 bug 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...