表达式的转换(sdut-2484)
来源:互联网 发布:网络用语及其意思 编辑:程序博客网 时间:2024/05/24 07:15
算术表达式的转换
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下。
因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢?小明很困惑。聪明的你帮他解决吧。
输入
输入一算术表达式,以\'#\'字符作为结束标志。(数据保证无空格,只有一组输入)
输出
输出该表达式转换所得到的前缀式 中缀式 后缀式。分三行输出,顺序是前缀式 中缀式 后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
+*ab*-c/defa*b+c-d/e*fab*cde/-f*+
醉了 前后缀运算符优先级是不同的 前缀倒着来 后缀正着来
然后pat上的表达式怎么也过不了(っ╥╯﹏╰╥c)
#include <iostream>#include<cstring>#include<cstdio>using namespace std;const int MAXN=10100;char s[MAXN];int cmp1(char a, char b){ if(a=='*' || a=='/') return 1; else if((a=='+' || a=='-') && (b == '+' || b == '-')) return 1; else return 0;}int cmp2(char a, char b){ if((a=='*' || a=='/')&& (b == '+' || b == '-')) return 1; else return 0;}void out(){ int top1 = 0, top2 = 0, i=0; char st[MAXN],st3[MAXN]; while(s[i] != '#') { if(isalpha(s[i])) st3[top1++] = s[i]; else if(top2 == 0) st[top2++] = s[i]; else if(s[i] == '(') st[top2++] = s[i]; else if(s[i] == ')') { while(st[top2-1] != '(') st3[top1++] = st[--top2]; --top2; } else if(cmp1(st[top2-1], s[i])) { st3[top1++] = st[--top2]; st[top2++] = s[i]; } else { st[top2++] = s[i]; } i++; } while(top2 != 0) { st3[top1++] = st[--top2]; } st3[top1]='\0'; cout<<st3<<endl;}void mid(){ int i; for(i=0;s[i]!='#';++i) { if(s[i]!='('&&s[i]!=')')cout<<s[i]; } cout<<endl;}void in(){ int top1 = 0, top2 = 0, i=strlen(s)-2; char st[MAXN],st3[MAXN]; while(i>=0) { if(isalpha(s[i])) st3[top1++] = s[i]; else if(top2 == 0) st[top2++] = s[i]; else if(s[i] == ')') st[top2++] = s[i]; else if(s[i] == '(') { while(st[top2-1] != ')') st3[top1++] = st[--top2]; --top2; } else if(cmp2(st[top2-1], s[i])) { st3[top1++] = st[--top2]; st[top2++] = s[i]; } else { st[top2++] = s[i]; } i--; } while(top2 != 0) { st3[top1++] = st[--top2]; } for(i=top1-1;i>=0;--i)cout<<st3[i]; cout<<endl;}int main(){ while(cin>>s) { in(); mid(); out(); } return 0;} /**************************************Problem id: SDUT OJ 2484 User name: zhxw150213王文豪 Result: Accepted Take Memory: 480K Take Time: 0MS Submit Time: 2016-03-23 09:36:23 **************************************/
1 0
- 表达式的转换(sdut-2484)
- SDUT 2484 算术表达式的转换
- SDUT 2484 算术表达式的转换
- sdut oj2484 算术表达式的转换(栈)
- SDUT算术表达式的转换(二叉树做法,建树及转换操作)
- 数据结构之栈:算数表达式的转换 (sdut oj2484)
- SDUT 1252----进制转换(栈)
- SDUT—1252(进制转换)
- sdut 翻译布尔表达式
- SDUTOJ 2484 算术表达式的转换(栈)
- SDUT--进制转换
- 大小写转换 (sdut oj)
- SDUTOJ 2484 算术表达式的转换(表达式树)
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT OJ 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式 SDUT
- CSU - 1774 慷慨的奖励(模拟链表)
- 读取XML中的信息GDAL生成shp文件
- Linux下MPI并行编程环境搭建配置
- WebService服务创建
- java动态代理(JDK和cglib)
- 表达式的转换(sdut-2484)
- SICP-Python版本(1.7)
- 嵌入式linux基于netkit-ftp-0.17的ftp客户端移植
- Android编程:UDP客户端和TCP客户端
- in-第一周总结
- hive和impala查询数据对比
- TCP协议与UDP协议的区别
- windows下通过命令行启动android studio自带的安卓模拟器
- 暑假训练Round1——G: Hkhv的水题之二(字符串的最小表示)