zoukankan      html  css  js  c++  java
  • nyist oj 467 (中缀式变后缀式)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=467

    直接上代码:

      1 #include <cstdio>
      2 #include <cstring>
      3 using namespace std;
      4 
      5 const int N = 1001;
      6 char stack[N];
      7 char op[N];
      8 char s[N];
      9 int top;
     10 int top_op;
     11 
     12 int compare(char a);
     13 void translate();
     14 
     15 int main()
     16 {
     17      int t;
     18      scanf("%d", &t);
     19      while(t--)
     20      {
     21           translate();           
     22     }
     23      return 0;     
     24 }
     25 
     26 int compare(char a)
     27 {
     28      switch(a)
     29     {
     30               case '+':
     31              case '-':
     32                    return 1;
     33              case '*':
     34              case '/':
     35                    return 2;
     36              case '(':
     37                    return 0;
     38              default:
     39                    return -1;          
     40     }     
     41 }
     42 
     43 void translate()
     44 {
     45       scanf("%s", s);
     46       int len = strlen(s) - 1;
     47       top = -1;
     48       top_op = -1;
     49       for(int i = 0; i < len; i++)
     50       {
     51                  if('0' <= s[i] && s[i] <= '9' || s[i] == '.')
     52               {
     53                      top++;
     54                      stack[top] = s[i];          
     55               }           
     56               else if(s[i] == '(')
     57               {
     58                      top_op++;
     59                      op[top_op] = s[i];           
     60               }
     61               else if(s[i] == ')')
     62               {
     63                      while(op[top_op] != '(')
     64                      {
     65                              top++;
     66                              stack[top] = ' ';
     67                              top++;
     68                              stack[top] = op[top_op];
     69                              top_op--;                 
     70                      }   
     71                      top_op--;  
     72               }
     73               else if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
     74               {
     75                      top++;
     76                      stack[top] = ' ';
     77                      if(top_op != -1)
     78                      {
     79                             while(compare(s[i]) <= compare(op[top_op]))
     80                             {
     81                                    top++;
     82                                    stack[top] = op[top_op];
     83                                    top++;
     84                                    stack[top] = ' ';                            
     85                                    top_op--;                        
     86                            }  
     87                      }
     88                      top_op++;
     89                      op[top_op] = s[i];  
     90               }
     91       }            
     92       while(top_op != -1)
     93       {
     94               top++;
     95               stack[top] = ' ';
     96               top++;
     97               stack[top] = op[top_op];
     98               top_op--;             
     99       }
    100       top++;
    101       stack[top] = ' ';
    102       top++;
    103       stack[top] = '=';
    104       top++;
    105       stack[top] = '\0';
    106       printf("%s\n", stack);
    107 }
  • 相关阅读:
    Application和Page详解
    Session解析
    CSS设置技巧
    CSS布局模型
    CSS盒模型
    JAVA -Xms -Xmx -XX:PermSize -XX:MaxPermSize 区别
    设计模式——单例模式
    设计模式——工厂模式
    Go语言学习
    每周一个设计模式
  • 原文地址:https://www.cnblogs.com/10jschen/p/2631173.html
Copyright © 2011-2022 走看看