标签:
描述
给定一字符串,判断字符串中的括号是否匹配,这里括号分为大括号{}、中括号[],圆括号()三种类型。每行字符串最大不超过1000个。
输入
输入数据分多组,第一行输入数据的组数n,接下来的n行,每行为需要判断的字符串。
输出
输出匹配情况:
(1)如果字符串中的应匹配的左括号和右括号不是同一类型,输出wrong
(2)如果不是(1)的情况,假如只存在一个右括号没有应匹配的左括号,输出miss left
(3)如果不是(1)的情况,假如只存在一个左括号没有应匹配的右括号,输出miss right
(4)如果完全匹配,输出match
注意:如果(2)和(3)情况同时出现,输出wrong。
样例输入
样例输出
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