1 #include<cstdio> 2 #include<cstdlib> 3 #include <iostream> 4 #define Maxsize 50 5 using namespace std; 6 typedef struct 7 { 8 char Data[Maxsize]; 9 int top; 10 }Sqstack; 11 bool InitStack(Sqstack& L) 12 { 13 L.top = -1; 14 return true; 15 } 16 bool Push(Sqstack& L,char Elem) 17 { 18 if (L.top == Maxsize-1) 19 return false; 20 L.Data[++L.top] = Elem; 21 return true; 22 } 23 bool Pop(Sqstack& L,char& Elem) 24 { 25 if (L.top == -1) return false; 26 Elem = L.Data[L.top--]; 27 return true; 28 } 29 bool StackEmpty(Sqstack L) 30 { 31 if (L.top == -1) return true; 32 return false; 33 } 34 /***********以上为栈的相关操作*********/ 35 bool bracketCheck(Sqstack& L, int len,char str[]) 36 { 37 for (int i = 0; i < len; i++) 38 { 39 if (str[i] == '(' || str[i] == '{' || str[i] == '[') 40 Push(L, str[i]); 41 else { 42 char Elem; 43 if (StackEmpty(L)) return false; 44 Pop(L, Elem); 45 if (str[i] == ')' && Elem != '(') return false; 46 if (str[i] == ']' && Elem != '[') return false; 47 if (str[i] == '}' && Elem != '{') return false; 48 } 49 } 50 return StackEmpty(L); 51 } 52 int main() 53 { 54 Sqstack L; 55 char Elem = 'x'; 56 InitStack(L); 57 int length = 0; 58 char str[Maxsize]; 59 while (true) 60 { 61 Elem = getchar(); 62 if (Elem == '\n') break; 63 if(Elem=='('||Elem==')') str[length++] = Elem; 64 } 65 if (bracketCheck(L, length, str)) 66 cout << "括号匹配成功" << endl; 67 else cout << "括号匹配失败" <<endl; 68 return true; 69 }