给定一串字符,不超过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;
}