zoukankan      html  css  js  c++  java
  • NYOJ 257 郁闷的C小加(一) (字符串处理)

    题目链接

    描述

    我们熟悉的表达式如a+b、a+b(c+d)等都属于中缀表达式。中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2。同理,后缀表达式就是操作符在两个操作数之后:num1 num2 operand。ACM队的“C小加”正在郁闷怎样把一个中缀表达式转换为后缀表达式,现在请你设计一个程序,帮助C小加把中缀表达式转换成后缀表达式。为简化问题,操作数均为个位数,操作符只有+-/ 和小括号。

    • 输入
      第一行输入T,表示有T组测试数据(T<10)。每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个表达式。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。并且输入数据不会出现不匹配现象。
    • 输出
      每组输出都单独成行,输出转换的后缀表达式。
    • 样例输入
      2
      1+2
      (1+2)3+45
    • 样例输出
      12+
      12+345+

    分析:

    其实就只是一个最简单的中缀转后缀的方法,而且题上还不涉及小数,也没有必要将操作数分割。

    代码:

    #include<string>
    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    #include<stack>
    using namespace std;
    char a[1009],b[1009];
    char pri[300];
    void trans(char a[])
    {
        stack<char>q;
        q.push('=');
        int j=0;
        for(int i=0; a[i]!=''; i++)
        {
            if(a[i]>='0'&&a[i]<='9')
                b[j++]=a[i];
            else if(a[i]=='(')
                q.push(a[i]);
            else if(a[i]==')')
            {
                while(q.top()!='(')
                {
                    b[j++]=q.top();
                    q.pop();
                }
                q.pop();
            }
            else
            {
                while(pri[a[i]]<=pri[q.top()])
                {
                    b[j++]=q.top();
                    q.pop();
                }
                q.push(a[i]);
            }
        }
        while(q.top()!='=')
        {
            b[j++]=q.top();
            q.pop();
        }
    
        b[j]='';
    }
    int main()
    {
        int T;
        pri['=']=-1;
        pri['(']=0;
        pri['+']=1;
        pri['-']=1;
        pri['*']=2;
        pri['/']=2;
        pri[')']=3;
        scanf("%d",&T);
        while (T--)
        {
            memset(a,'',sizeof(a));
            memset(b,'',sizeof(b));
            scanf(" %s",a);
           // puts(a);
            trans(a);
            puts(b);
        }
        return 0;
    }
  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6735968.html
Copyright © 2011-2022 走看看