算术表达式的转换
2015-06-04 21:22
323 查看
题目描述
小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下。因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢?小明很困惑。聪明的你帮他解决吧。
输入
输入一算术表达式,以\'#\'字符作为结束标志。(数据保证无空格,只有一组输入)输出
输出该表达式转换所得到的前缀式 中缀式 后缀式。分三行输出,顺序是前缀式 中缀式 后缀式。示例输入
a*b+(c-d/e)*f#
示例输出
+*ab*-c/def a*b+c-d/e*f ab*cde/-f*+
发现前缀表达式和后缀的差不多,而中缀的话就把括号去掉就行。
#include<stdio.h> #include<string.h> char a[1000],ls[1000], la[1000]; int cmp(char z) { if(z == '+' || z == '-') return 1; if(z == '*' || z == '/') return 2; if(z == ')') return 3; if(z == '(') return 4; } int main() { scanf("%s",a); int i = 0,k = 0, c = 0; int str = strlen(a); str = str - 2; while(str >= 0) { if(a[str] >= 'a' && a[str] <= 'z') { la[c++] = a[str]; } else { if(k == 0 ) { ls[k++] = a[str]; } else { if(cmp(ls[k-1]) <= cmp(a[str])) { if(a[str] == '(') { k = k - 1; for(; ls[k] != ')'; k--) { la[c++] = ls[k]; } } else { ls[k++] = a[str]; } } else { if(ls[k-1] != ')') { la[c++] = ls[k-1]; ls[k-1] = a[str]; } else ls[k++] = a[str]; } } } str--; } c = c- 1; for(i = 0; i < k; i++) { printf("%c",ls[i]); } for(; c >= 0; c--) printf("%c",la[c]); printf("\n"); for(i = 0; a[i] != '#'; i++) { if(a[i] != '(' && a[i] != ')') { printf("%c",a[i]); } } printf("\n"); k = 0; memset(ls,0,sizeof(ls)); for(i = 0; a[i] != '#'; i++) { if(a[i] >= 'a' && a[i] <= 'z') { printf("%c",a[i]); } else { if(k == 0) { ls[k++] = a[i]; } else { if(cmp(ls[k-1]) >= cmp(a[i])) { if(ls[k-1]!= '(') { printf("%c",ls[k-1]); ls[k-1] = a[i]; } else { ls[k++] = a[i]; } } else { if(a[i] == ')') { k = k-1; for(; ls[k]!='('; k--) { printf("%c",ls[k]); } } else { ls[k++] = a[i]; } } } } } k = k - 1; while(k>=0) { printf("%c",ls[k]); k--; } printf("\n"); return 0; }
相关文章推荐
- 小记
- 浅谈c++多态性
- P124.39
- HTTPS
- JavaScript词法作用域(你不知道的JavaScript)
- H.264/ACC音视频编码流的RTP/RTSP传输实现(1)
- JavaScript词法作用域(你不知道的JavaScript)
- Hive Metastore 连接报错
- 什么样的内容排版才符合用户体验
- 如何使用 orachk 工具
- Struts2入门实例
- Web应用中大部分跳转路径如何书写
- HDU 1596
- 信号量与管程
- Caffe-代码解析-Blob
- Java for LeetCode 144 Binary Tree Preorder Traversal
- HDU 1285 【简单拓扑】
- 【EmguCV】C#实现HOG与SVM的几个问题
- 乂文®便携触摸屏
- Yii2 使用 bootboxJS美化confirm窗口