给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
输入样例1:
sin(10+20)
输出样例1:
yes
输入样例2:
{[}]
输出样例2:
no
代码演示:22分
事实上,在test==1还不能完全说明匹配成功,因为可能是{【】{}这样的情况,最后剩下{,是不匹配的,然而test==1。所以最后的判断应该是top==-1;
#include<stdio.h>
#include<string.h>
int check(char *s, int top, char op) {
if (op == ')') {
if (s[top] == '(')
return 1;
} else if (op == ']') {
if (s[top] == '[')
return 1;
} else if (op == '}') {
if (s[top] == '{')
return 1;
}
return 0;
}
int main() {
char op[100];
scanf("%s", op);
int len = strlen(op);
char s[100];
int top = -1;
int test;
for (int i = 0; i < len; i++) {
//入栈
if (op[i] == '(') {
s[++top] = '(';
} else if (op[i] == '[') {
s[++top] = '[';
} else if (op[i] == '{') {
s[++top] = '{';
}
//检查匹配,成功就弹出
if (op[i] == ')' || op[i] == ']' || op[i] == '}') {
test = check(s, top, op[i]);
if (test == 1) {
top--;
} else {
printf("no\n");
return 0; // 输出结果后直接结束程序
}
}
}
if (top == -1) {
printf("yes\n");
} else {
printf("no\n");
}
return 0;
}