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

    中缀式变后缀式

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。
     
    输入
    第一行输入一个整数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<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<stack>
    using namespace std;
    const int MAXN=1010;
    char s[MAXN];
    void getnum(int& i){
        while(isdigit(s[i])||s[i]=='.'){
            printf("%c",s[i++]);
        }
    }
    char work(char a,char b){
        if(a=='#')return '<';
        if(a=='+'||a=='-'){
            if(b=='*'||b=='/'||b=='(')return '<';
            else return '>';
        }
        if(a=='*'||a=='/'){
            if(b=='(')return '<';
            else return '>';
        }
        if(a=='('&&b==')')return '=';
        if(b==')')return '>';
        return '<';
    }
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            scanf("%s",s);
            stack<char>S;
            S.push('#');
            for(int i=0;s[i];){
                if(isdigit(s[i])||s[i]=='.'){
                    getnum(i);
                    printf(" ");
                }
                else{
                    switch(work(S.top(),s[i])){
                        case '<':S.push(s[i]);i++;break;
                        case '>':printf("%c ",S.top());S.pop();break;
                        case '=':S.pop();i++;break;
                    }
                }
            }
            puts("=");
        }
        return 0;
    }
  • 相关阅读:
    国际商务金融
    [手游新项目历程]第22天-野指针
    疯狂的A股:“杠杆牛市”后,是否坠入新轮回?
    [硬盘分区]EASEUS怎么用(EASEUS Partition Master使用教程)
    [硬盘分区]EASEUS怎么用(EASEUS Partition Master使用教程)
    linux下如何更新glibc包
    游戏是任何行业的垂直行业,《游戏改变世界》读后感
    虚函数实现原理(转)
    虚函数实现原理(转)
    bzoj2783
  • 原文地址:https://www.cnblogs.com/handsomecui/p/5241797.html
Copyright © 2011-2022 走看看