描述现在,有一行括号序列,请你检查这行括号是否配对。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入
-
3[(])(])([[]()])
样例输出 -
NoNoYes
1 #include
2 #include 3 #include 4 #include 5 using namespace std; 6 7 #define MaxSize 10000 8 typedef int ElemType; 9 typedef struct 10 { 11 ElemType data[MaxSize]; 12 int top; 13 }SqStack; 14 15 int InitStack(SqStack &S) 16 { //初始化顺序栈 17 memset(S.data, 0, MaxSize); 18 S.top = -1; 19 return 1; 20 } 21 22 int Push(SqStack &S,char ch) 23 { //字符进栈 24 if (S.top >= MaxSize) 25 return 0; 26 S.top++; 27 S.data[S.top] = ch; 28 return 1; 29 } 30 31 char Pop(SqStack &S) 32 { //字符出栈 33 char ch; 34 if (S.top < 0) 35 return 0; 36 ch = S.data[S.top]; 37 S.top--; 38 //printf("Pop:: %c", ch); 39 //printf("\n"); 40 return ch; 41 } 42 43 void OutputStack(SqStack S) 44 { 45 for (int i = S.top; i >= 0; i--) 46 printf("%c ", S.data[i]); 47 printf("\n"); 48 } 49 50 51 52 int main() 53 { //第一行输入一个数N(0 <=100),表示有N组测试数据。后面的N行输入多组 54 //输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空 55 //串),测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")"四种字符 56 int N; 57 scanf("%d", &N); 58 getchar();//读取回车 59 60 string line; 61 int len, i, tag; 62 char now, temp; 63 SqStack S; 64 while (N--) 65 { 66 tag = 1; 67 getline(cin, line); 68 //cout << line << endl; 69 len = line.length();//读入一行括号,计算字符串长度 70 InitStack(S);//初始化栈的内容 71 for (i = 0; i < len; i++) 72 { 73 now = line[i]; 74 switch (now) 75 { 76 case '[':Push(S, now); break;//printf("成功入栈:: "); OutputStack(S); 77 case '(':Push(S, now); break;//printf("成功入栈:: "); OutputStack(S); 78 default:break; 79 } 80 81 if (now == ']') 82 { 83 temp = Pop(S); 84 //printf("temp:: %c", temp); 85 //printf("\n"); 86 if (temp == '[') 87 continue; 88 else 89 { 90 //printf("tag=0 :: "); 91 //OutputStack(S); 92 tag = 0; 93 break; 94 } 95 } 96 else if(now == ')') 97 { 98 temp = Pop(S); 99 //printf("temp:: %c", temp);100 //printf("\n");101 if (temp == '(')102 continue;103 else104 {105 //printf("tag=0 :: ");106 //OutputStack(S);107 tag = 0;108 break;109 }110 }111 }112 if (tag == 0)113 {114 printf("No\n");115 }116 else if (tag == 1 && S.top == -1)117 {118 printf("Yes\n");119 }120 else121 {122 printf("No\n");123 }124 }125 126 return 0;127 }128 //_CRT_SECURE_NO_WARNINGS