数据结构练习题---括号匹配

时间:2023-02-23 22:49:47

描述

给定一字符串,判断字符串中的括号是否匹配,这里括号分为大括号{}、中括号[],圆括号()三种类型。每行字符串最大不超过1000个。

输入

输入数据分多组,第一行输入数据的组数n,接下来的n行,每行为需要判断的字符串。

输出

 

输出匹配情况:


(1)如果字符串中的应匹配的左括号和右括号不是同一类型,输出wrong


(2)如果不是(1)的情况,假如只存在一个右括号没有应匹配的左括号,输出miss left


(3)如果不是(1)的情况,假如只存在一个左括号没有应匹配的右括号,输出miss right


(4)如果完全匹配,输出match


注意:如果(2)和(3)情况同时出现,输出wrong。

 

样例输入

 

3
(123)
{[(234}))
{123

 

样例输出

 

match
wrong
miss right
 
 
  1 #include<iostream>
  2 #include<stdio.h>
  3 #include<string.h>
  4 using namespace std;
  5 typedef struct node
  6 {
  7     char e;
  8     struct node *next;
  9 }node,*stackk;
 10 
 11 void initstack(stackk &top)
 12 {
 13     stackk p = new node;
 14     p->next = NULL;
 15     top = p;
 16 }
 17 
 18 void pushstack(stackk &top, char ch)
 19 {
 20     stackk p = new node;
 21     p->e = ch;
 22     p->next = top;
 23     top = p;
 24 }
 25 
 26 char printfstack(stackk &top)
 27 {
 28     return top->e;
 29 }
 30 
 31 void popstack(stackk &top)
 32 {
 33     stackk p = new node;
 34     p = top;
 35     top = top->next;
 36     delete p;
 37 }
 38 
 39 int isempty(stackk &top)
 40 {
 41     if(top->next == NULL)  return 0;
 42     else return 1;
 43 }
 44 
 45 int tt(stackk &top)
 46 {
 47     if(top->next->next == NULL) return 1;
 48     else return 0;
 49 }
 50 
 51 int main()
 52 {
 53     int n, i, l, j;
 54     char ch, a[1009], b[1009];
 55     while(cin>>n)
 56     {
 57         getchar();
 58         while(n--)
 59         {
 60             stackk L;
 61             initstack(L);
 62             gets(a);
 63             l = strlen(a);
 64             for(i = 0,j = 0; i < l; i++)
 65             {
 66                 if(a[i] == '{' || a[i] == '(' || a[i] =='[')
 67                     pushstack(L,a[i]);
 68                 else if(a[i] == '}' || a[i] == ')' || a[i] ==']')
 69                 {
 70                     b[j] = a[i];
 71                     j++;
 72                 }
 73             }
 74             memset(a,'0',sizeof a);
 75             l = 0;
 76             for(i = 0; i < j; i++)
 77             {
 78                 if(isempty(L)==0)
 79                 {
 80                     a[l] = b[i];
 81                     l=l+1;
 82                 }
 83                 else
 84                 {
 85                     ch = printfstack(L);
 86                     if(b[i] == '}')
 87                     {    
 88                         if(ch == '{')
 89                                 popstack(L);
 90                         else
 91                             {
 92                                 a[l] = b[i];
 93                                 l++;
 94                             }
 95                     }
 96                     else if(b[i] == ')')
 97                     {
 98                         if(ch == '(')
 99                                 popstack(L);
100                         else
101                             {
102                                 a[l] = b[i];
103                                 l++;
104                             }
105                     }
106                     else if(b[i] == ']')
107                     {
108                         if(ch == '[')
109                                 popstack(L);                        
110                         else
111                             {
112                                 a[l] = b[i];
113                                 l++;
114                             }
115                     }
116                 }
117             }
118 
119 
120             if(isempty(L)==0)
121             {
122                 if(l==0)
123                     cout<<"match"<<endl;
124                 else if(isempty(L)==0&&l==1)
125                     cout<<"miss left"<<endl; 
126                 else
127                     cout<<"wrong"<<endl;
128             }
129             else
130             {
131                 if(tt(L)==1&&l==0)
132                     cout<<"miss right"<<endl;
133                 else
134                     cout<<"wrong"<<endl;
135             }
136         }
137     }
138     return 0;
139 }