码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-08 21:50:10      阅读:423      评论:0      收藏:0      [点我收藏+]

标签:

描述

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

 

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

标签:

原文地址:http://www.cnblogs.com/jianqian/p/5030889.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!