题目2-括号配对问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目2-括号配对问题相关的知识,希望对你有一定的参考价值。
描述现在,有一行括号序列,请你检查这行括号是否配对。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
- 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
- 样例输入
-
3 [(]) (]) ([[]()])
- 样例输出
-
No No Yes
1 #include<stdio.h> 2 #include<string> 3 #include<cstring> 4 #include<iostream> 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<N<=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 else 104 { 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 else 121 { 122 printf("No\n"); 123 } 124 } 125 126 return 0; 127 } 128 //_CRT_SECURE_NO_WARNINGS
以上是关于题目2-括号配对问题的主要内容,如果未能解决你的问题,请参考以下文章