题目描述
苗苗今天刚刚学会使用小括号,不过他分不清小中大括号和尖括号,不知道怎么使用其他括号,他认为(>以及{]是正确的(其实是错误的),你能帮助他判断括号是否使用正确(匹配)吗?
解答要求时间限制:1000ms, 内存限制:64MB
输入
输入文件包含六组测试数据,每组测试数据是一行只包含’(‘,’)’,’{‘,’}’,’[‘,’]’,’<’,’>’的字符串(长度不超过10000)。
输出
对于每组测试数据,如果使用正确输出yes,否则输出no。每个占一行。
输入样例
[>
([]{<>})
({[<>]})
()
()
()
输出样例 1
no yes yes yes yes yes
提示
栈的应用:
依次读入字符,如果是左括号,将它放进栈,如果是右括号,而且栈顶元素是相对应的左括号,就把栈顶元素弹出,最后如果栈空就跳出循环,结果为no,因为这样说明栈中没有左括号;字符全都读入,如果栈空的话,就是yes,否则就是no。
//
// Created by l50007414 on 2019/9/18.
//
#include <stdio.h>
#include <string.h>
void caculate1(char *data);
typedef struct stack {
char data[10000];
int top;
} stack;
int main() {
for (int i = 0; i < 6; ++i) {
char data[10000];
gets(data);
caculate1(data);
}
return 0;
}
void caculate1(char *data) {
stack temp = {{0}, -1};
int size = strlen(data);
for (int i = 0; i < size; ++i) {
//如果是左括号 将其入栈
if (data[i] == '(' || data[i] == '{' || data[i] == '[' || data[i] == '<') {
temp.data[++temp.top] = data[i];
} else {
//如果不是 就将其与栈顶元素比较 不等则出错 相等就出栈
if ((data[i] == ')' && temp.data[temp.top] == '(') || (data[i] == '}' && temp.data[temp.top] == '{') ||
(data[i] == ']' && temp.data[temp.top] == '[')
|| (data[i] == '>' && temp.data[temp.top] == '<')) {
temp.top--;
} else {
printf("no\n");
return;;
}
}
}
if (temp.top == -1) {
printf("yes\n");
} else {
printf("no\n");
}
}