• 经典c程序(0027)一括号匹配


      1     /**************************************************************************************    
      2     * Function     : 括号匹配 
      3     * Create Date  : 2014/05/16  
      4     * Author       : NTSK13    
      5     * Email        : beijiwei@qq.com    
      6     * Copyright    : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。    
      7     *                任何单位和个人不经本人允许不得用于商业用途    
      8     * Version      : V0.1                       
      9                          
     10     题目: 经典c程序(0027)一括号匹配 
     11         现在,有一行括号序列,请你检查这行括号是否配对。  
     12         输入 : 
     13             第一行输入一个数N(0<N<=100),表示有N组测试数据。 
     14             后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串), 
     15             测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符  
     16      
     17         输出 : 
     18             每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No  
     19          
     20         样例输入 : 
     21                     3 
     22                     [(]) 
     23                     (]) 
     24                     ([[]()]) 
     25         样例输出 : 
     26                     No 
     27                     No 
     28                     Yes 
     29     **************************************************************************************/        
     30     #include<stdio.h>        
     31       
     32     // 测试数据可自由修改  
     33     #define COUNT   5  
     34     #define LENGTH  50  
     35       
     36     static char brackets_array[COUNT][LENGTH] =   
     37     {  
     38         "[(])",  
     39         "(])",  
     40         "([[]()])",  
     41         "([[](((()[])))[[()]]](([[()]])))",  
     42         "([[](((()[[])))[[()]]]](([[()]])))",  
     43     };  
     44       
     45     int run_test(char* pBracketString);  
     46       
     47     int main(void)  
     48     {  
     49         int i = 0;  
     50         for ( i = 0; i < COUNT; i++)  
     51         {  
     52             if (run_test(brackets_array[i]))  
     53             {  
     54                 printf("Yes");  
     55             }else  
     56             {  
     57                 printf("No");  
     58             }  
     59             printf("
    ");  
     60         }  
     61     }  
     62       
     63       
     64     int run_test(char* pBracketString)  
     65     {  
     66         char *ptmp=pBracketString;  
     67         int  k=0,len=0;  
     68         char stack[LENGTH/2]={''};  
     69         while(*ptmp !='')  
     70         {  
     71             ptmp++;  
     72             len++;  
     73         }  
     74         //printf("len=%d  len%2=%d
    ",len,len%2);  
     75         if( len%2 )//长度为奇数  
     76             return 0;  
     77         else  
     78         {  
     79             ptmp=pBracketString;  
     80             while(*ptmp !='')  
     81             {  
     82     #if 1  
     83                 switch(*ptmp)  
     84                 {  
     85                     case '(':  
     86                     case '[':  
     87                         stack[k++]=*ptmp;  
     88                         break;  
     89                     case ')':  
     90                         if( stack[k-1] =='(' )  
     91                             stack[--k]='';  
     92                         else  
     93                             return 0;  
     94                         break;  
     95                     case ']':  
     96                         if( stack[k-1] =='[' )  
     97                             stack[--k]='';  
     98                         else  
     99                             return 0;  
    100                         break;  
    101                     default:  
    102                         break;  
    103                 }  
    104                 ptmp++;  
    105             }  
    106             if(stack[0]=='')  
    107                 return 1;  
    108             else  
    109                 return 0;  
    110     #else     
    111                 if( *ptmp=='(' || *ptmp=='['  )  
    112                 {  
    113                     stack[k++]=*ptmp;  
    114                     ptmp++;  
    115                     continue;  
    116                 }  
    117               
    118                 if( *ptmp==')' && stack[k-1] =='('  )  
    119                 {  
    120                     stack[--k]='';  
    121                     ptmp++;  
    122                     continue;  
    123                 }  
    124       
    125                 if( *ptmp==')' && stack[k-1] !='('  )  
    126                     return 0;  
    127       
    128                 if( *ptmp==']' && stack[k-1] =='['   )  
    129                 {     
    130                     stack[--k]='';  
    131                     ptmp++;  
    132                     continue;  
    133                 }  
    134                 if( *ptmp==']' && stack[k-1] !='['   )  
    135                     return 0;  
    136                   
    137                 ptmp++;  
    138             }  
    139             if(stack[0]=='')  
    140                 return 1;  
    141             else  
    142                 return 0;  
    143     #endif  
    144           
    145         }  
    146     }  
    147 
    148  
  • 相关阅读:
    循环移位算法
    关于Java中2.0-1.1!=0.9的问题
    Java基础语法(三)
    Java基础语法(二)
    Java基础语法(一)
    关于Java运行机制
    Java从零开始(前篇)
    关于.ssh目录下的known_hosts文件的补充
    解决 bash cd too many arguments 报错
    Markdown学习笔记(一)
  • 原文地址:https://www.cnblogs.com/ntsk13/p/3732184.html
Copyright © 2020-2023  润新知