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;
    }
  • 相关阅读:
    css
    bootstrap
    在线小工具
    文档工具-Markdown
    js
    棋盘问题(深搜,统计)
    ****Curling 2.0(深搜+回溯)
    POJ 2676 Sudoku(深搜)
    POJ 2488 A Knight's Journey(深搜+回溯)
    ural 1104. Don’t Ask Woman about Her Age
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6735968.html
Copyright © 2011-2022 走看看