首页 > 代码库 > 中缀式变后缀式
中缀式变后缀式
中缀式变后缀式
描述
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。
- 输入
- 第一行输入一个整数n,共有n组测试数据(n<10)。 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。 数据保证除数不会为0
- 输出
- 每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。
- 样例输入
21.000+2/4=((1+2)*5+1)/4=
- 样例输出
1.000 2 4 / + =1 2 + 5 * 1 + 4 / =
#include"stdio.h"#include"string.h"int youxianji(char a){switch(a){case ‘+‘:case ‘-‘:return 1;break;case ‘*‘:case ‘/‘:return 2;break;case ‘(‘:return 0;break;default:return -1;break;}}int main(){char caozuoshu[1000+10],houzui[1000+10],j[1000+10];int i,k,n,t,top;scanf("%d",&n);while(n--){scanf("%s",j);t=strlen(j)-1; //去掉=号caozuoshu[0]=‘#‘;for(i=0,k=0,top=1;i<=t;i++){if((j[i]>=‘0‘&&j[i]<=‘9‘)||j[i]==‘.‘)houzui[k++]=j[i];else if(j[i]==‘(‘)caozuoshu[top++]=j[i];else if(j[i]==‘)‘){top=top-1;while(caozuoshu[top]!=‘(‘){houzui[k++]=‘ ‘;houzui[k++]=caozuoshu[top--];}}else if(j[i]==‘/‘||j[i]==‘*‘||j[i]==‘-‘||j[i]==‘+‘){houzui[k++]=‘ ‘;while(youxianji(j[i])<=youxianji(caozuoshu[top-1])){ houzui[k++]=caozuoshu[--top];houzui[k++]=‘ ‘;}caozuoshu[top]=j[i];top++;}}top=top-1;while(caozuoshu[top]!=‘#‘){houzui[k++]=‘ ‘;houzui[k++]=caozuoshu[top--];}houzui[k]=‘ ‘;houzui[k+1]=‘=‘;houzui[k+2]=‘\0‘;printf("%s\n",houzui);}return 0;}//转
中缀式变后缀式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。