zoukankan      html  css  js  c++  java
  • 中缀式变后缀式

    中缀式变后缀式

    描述

    人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。

     
    输入
    第一行输入一个整数n,共有n组测试数据(n<10)。 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。 数据保证除数不会为0
    输出
    每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。
    样例输入
    2
    1.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]='';
    printf("%s
    ",houzui);
    
    
    
    
    }
    
    
    
    
    
    
    
    
    
    return 0;
    }
    
    
    
    //
  • 相关阅读:
    读取INI配置文件
    在VB编程中,若一行代码太长需要换行时,行尾要加什么符号
    使用order by和group by的分析
    转 Sqlserver_left join 、right join、 inner join 用法
    Python 字典(Dictionary)操作详解
    转sql server新增、修改字段语句(整理)
    Winform TextBox中只能输入数字的几种常用方法(C#)
    数据库的范式,第一、二、三、四、五范式、BC范式
    【操作系统】银行家算法
    转 图解排序算法(三)之堆排序
  • 原文地址:https://www.cnblogs.com/imwtr/p/4069598.html
Copyright © 2011-2022 走看看