首页 > 代码库 > 经典c程序(0027)一括号匹配
经典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("\n"); 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]={‘\0‘}; 69 while(*ptmp !=‘\0‘) 70 { 71 ptmp++; 72 len++; 73 } 74 //printf("len=%d len%2=%d\n",len,len%2); 75 if( len%2 )//长度为奇数 76 return 0; 77 else 78 { 79 ptmp=pBracketString; 80 while(*ptmp !=‘\0‘) 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]=‘\0‘; 92 else 93 return 0; 94 break; 95 case ‘]‘: 96 if( stack[k-1] ==‘[‘ ) 97 stack[--k]=‘\0‘; 98 else 99 return 0; 100 break; 101 default: 102 break; 103 } 104 ptmp++; 105 } 106 if(stack[0]==‘\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]=‘\0‘; 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]=‘\0‘; 131 ptmp++; 132 continue; 133 } 134 if( *ptmp==‘]‘ && stack[k-1] !=‘[‘ ) 135 return 0; 136 137 ptmp++; 138 } 139 if(stack[0]==‘\0‘) 140 return 1; 141 else 142 return 0; 143 #endif 144 145 } 146 } 147 148
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。