目录
一、题目内容
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
二、输入描述
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
三、输出描述
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
四、输入输出示例
输入:
4 [(d+f)*{}] [(2+3)) ()} [4(6]7)9输出:
yes no no no
五、完整C语言代码
AC代码~
#include<stdio.h>
#include<string.h>
char stack[1000]; // 栈进行括号匹配
int top = -1; // 栈顶指针
void IsMatch(char s[], int n) {
int i = 0;
int flag = 1; // flag:1:匹配 0:不匹配
while (i < n) {
if (s[i] == '[' || s[i] == '{' || s[i] == '(') {
top++;
stack[top] = s[i];
i++;
} else if (s[i] == ']' || s[i] == '}' || s[i] == ')') {
if (top == -1) {
flag = 0;
break;
}
char stack_top = stack[top];
top--;
if ((s[i] == ']' && stack_top != '[') || (s[i] == '}' && stack_top != '{') ||
(s[i] == ')' && stack_top != '(')) {
flag = 0;
break;
}
i++;
} else
i++;
}
if (top != -1) // 不要忘记,循环结束后若栈不为空则不匹配
flag = 0;
if (flag == 1)
printf("yes\n");
else
printf("no\n");
}
int main() {
int N;
char s[1000];
while (scanf("%d", &N) != EOF) {
char c = getchar();
for (int i = 0; i < N; i++) {
top = -1;
gets(s);
int len = strlen(s);
IsMatch(s, len);
}
}
return 0;
}
4272

被折叠的 条评论
为什么被折叠?



