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;
    }
  • 相关阅读:
    大学生程序猿IT情书“2014爱的告白挑战赛”获奖名单及优秀情书展示系列之
    Codeforces 385C Bear and Prime Numbers
    CSU1659: Graph Center(最短路)
    新版ADT出现appcompat_v7的问题
    @IBDesignable和@IBInspectable
    FTP命令详解
    R语言屏幕输出
    R语言常用基础知识(入门)
    R语言数据类型转换
    使用建议(内部使用)
  • 原文地址:https://www.cnblogs.com/handsomecui/p/5241797.html
Copyright © 2011-2022 走看看