SDUT 2134データ構造実験のスタック四:括弧整合
8028 ワード
n丸括弧と角括弧、入れ子の順番は任意です.()や〔〔〕などが正しいマッチングである;〔〔〕または〔〕または()はいずれもエラーのマッチングです.
ここで紹介したのは()[]だけです.
ここで紹介したのは()[]だけです.
1 #include<stdio.h>
2 #include<string.h>
3 int sw(char str)
4 {
5 if(str == '(')
6 return 1;
7 else
8 if(str == ')')
9 return 9;
10 else
11 if(str == '[')
12 return 2;
13 else
14 if(str == ']')
15 return 8;
16 else
17 if(str == '{')
18 return 3;
19 else
20 if(str == '}')
21 return 7;
22 else
23 return 0;
24 }
25 int push(int top,char str,char stack[])
26 {
27 stack[++top] = str;
28 return top;
29 }
30 int main()
31 {
32 int i,flag,k,j;
33 char str[51],stack[30];
34 while(gets(str)!=NULL)
35 {
36 int top = 0;
37 flag = 1;
38 k = strlen(str);
39 j = k;
40 for(i = 0 ; i < k ; i++)
41 {
42 if(sw(str[i])>0&&sw(str[i])<5)
43 top=push(top,str[i],stack);
44 else
45 if(sw(str[i])>0&&sw(str[i])>5)
46 {
47 if(top == 0)
48 {
49 flag = 0;
50 break;
51 }
52 if(sw(str[i])+sw(stack[top--]) == 10)
53 flag = 1;
54 else
55 flag = 0;
56 }
57 if(flag == 0)
58 break;
59 }
60
61 if(flag == 1&&top == 0)
62 printf("yes
");
63 else
64 printf("no
");
65 }
66 return 0 ;
67 }