首页 > 技术文章 > c判断括弧是否匹配

luckygxf 2014-04-14 00:14 原文

这里我没有用堆栈。直接用一个数组input[SIZE]接收用户的输入,在遍历数组,对数组进行操作。已经匹配好的括弧直接用#号覆盖,最后遍历数组。如果数组只有#号,没有其他元素,则匹配。否则不匹配。

 1 /*
 2  *判断括弧是否匹配
 3  */
 4 
 5 #include <stdio.h>
 6 #include <stdlib.h>
 7 #include <string.h>
 8 
 9 #define SIZE 10000
10 #define FALSE 0
11 #define TRUE 1
12 
13 int main()
14 {
15     char input[SIZE];                                                                                        //存放输入
16     
17     int point_first = 0;                                                                                    //遍历每一次的输入的指针
18     int point_last = 0;
19     int flag = TRUE;                                                                                        //flag = TRUE括号匹配 flag = FALSE括号不匹配
20     int num = 0;                                                                                            //一共要处理多少次输入                
21     int length = 0;
22     int i = 0;
23 
24 
25     scanf("%d", &num);
26 
27     while(num > 0)                                                                                            //处理每一次输入
28     {
29         i = 0;
30         flag = TRUE;
31         scanf("%s", input);
32         length = strlen(input);
33         for(point_first = 0; point_first < length; point_first ++)
34         {
35             if(input[point_first] == ')' || input[point_first] == ']')                                        //如果遇到)或者]向前找匹配的括弧,将其变成#
36             {
37                 point_last = point_first - 1;
38                 
39                 for(; point_last >= 0 && input[point_last] == '#'; point_last --);                            //向前遍历 
40                 
41                 if(point_last >= 0)            
42                     if((input[point_first] == ')' && input[point_last] == '(') || (input[point_first] == ']' && input[point_last] == '['))
43                     {
44                         input[point_last] = '#';
45                         input[point_first] = '#';
46                     }
47                     else
48                         break;
49                 else
50                     break;
51             }
52         }
53         while(i < length)
54         {
55             if(input[i] != '#')
56                 flag = FALSE;
57             i++;
58         }
59         if(flag == FALSE)
60             printf("%s\n", "No");
61         else
62             printf("%s\n", "Yes");
63 
64         num --;
65     }
66 
67 }

 

推荐阅读