首页 > 代码库 > 一般算数表达式转换为“后缀式”
一般算数表达式转换为“后缀式”
“师创杯”第六届ACM程序设计竞赛获奖情况
<style></style>
数据结构实验之栈二:一般算术表达式转换成后缀式
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
提示
所谓 后缀式表达式 即是:计算机内部对算式的处理先后顺序式!
此题写了半个小时哈,数据结构课本里的代码实在是难看。故,本人只是参看了算法,自己手敲的代码,运用栈的思想,
我的代码需要注意的地方是:当遇到 ‘ ) ‘时,该怎么搞?!!
本人的一贯做法,对于栈只是我用来存储的数组,每次我都是用一个e的下表指针来进行数据处理,遇到该出栈的数据,
我就把它给赋值掉,或者改变指针的位置,访问不到那个数据哈!
#include <stdio.h>#include <string.h>char a[1000];char s[1000];void main(){ int i, j, e, k; int len; while(scanf("%s", a)!=EOF) { len = strlen(a); memset(s, 0, sizeof(s)); e = 0; i = 0; while( i < len-1 ) { if( a[i]>=‘a‘ && a[i]<=‘z‘) { printf("%c", a[i] ); } else { if(e==0) { s[e++] = a[i]; } else if(e>0) { if(a[i] == ‘(‘) { s[e++] = a[i]; } if(a[i] == ‘+‘) { if( s[e-1]==‘(‘ ) { s[e++] = a[i]; } else if(s[e-1]==‘*‘ || s[e-1]==‘/‘ ||s[e-1]==‘+‘ || s[e-1]==‘-‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } if(a[i] == ‘-‘) { if( s[e-1]==‘(‘ ) { s[e++] = a[i]; } else if(s[e-1]==‘-‘ || s[e-1]==‘*‘ || s[e-1]==‘/‘ || s[e-1]==‘+‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } if( a[i] == ‘*‘) { if(s[e-1]==‘+‘ || s[e-1]==‘-‘ || s[e-1]==‘(‘ ) { s[e++] = a[i]; } else if(s[e-1]==‘*‘ || s[e-1]==‘/‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } if( a[i] == ‘/‘) { if(s[e-1]==‘+‘ || s[e-1]==‘-‘ || s[e-1]==‘(‘ ) { s[e++] = a[i] ; } else if(s[e-1]==‘*‘ || s[e-1]==‘/‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } if( a[i] == ‘)‘) { for(j=e-1; j>=0; j-- ) { if(s[j]==‘(‘) { e = j; break; } else { printf("%c", s[j] ); } } } } } i++; } for(k=e-1; k>=0; k--) { printf("%c", s[k] ); } printf("\n"); }}
一开始使用switch语句写的,结果运行错误,读者朋友可以给我指正哈!
此乃bug版本,哈哈哈哈哈哈哈哈哈哈!!!
#include <stdio.h>#include <string.h>char a[1000];char s[1000]; void main(){ int i, j, e, k; int len; while(scanf("%s", a)!=EOF) { len = strlen(a); memset(s, 0, sizeof(s)); e = 0; i = 0; while( i < len ) { if( a[i]>=‘a‘ && a[i]<=‘z‘) { printf("%c", a[i] ); } else { if(e==0) { s[e++] = a[i]; } else if(e>0) { switch( a[i] ) { case ‘(‘: { s[e++] = a[i]; } case ‘+‘: { if( s[e-1]==‘(‘ ) { s[e++] = a[i]; } else if(s[e-1]==‘*‘ || s[e-1]==‘/‘ ||s[e-1]==‘+‘ || s[e-1]==‘-‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } case ‘-‘: { if( s[e-1]==‘(‘ ) { s[e++] = a[i]; } else if(s[e-1]==‘-‘ || s[e-1]==‘*‘ || s[e-1]==‘/‘ || s[e-1]==‘+‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } case ‘*‘: { if(s[e-1]==‘+‘ || s[e-1]==‘-‘ || s[e-1]==‘(‘ ) { s[e++] = a[i]; } else if(s[e-1]==‘*‘ || s[e-1]==‘/‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } case ‘/‘: { if(s[e-1]==‘+‘ || s[e-1]==‘-‘ || s[e-1]==‘(‘ ) { s[e++] = a[i] ; } else if(s[e-1]==‘*‘ || s[e-1]==‘/‘ ) { printf("%c", s[e-1] ); s[e-1] = a[i]; } } case ‘)‘: { for(j=e-1; j>=0; j-- ) { if(s[j]==‘(‘) { e = j; break; } else { printf("%c", s[j] ); } } } } } } i++; } for(k=e-1; k>=0; k--) { printf("%c", s[k] ); } printf("\n"); }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。