用栈来判断输入的括号是否合法。
()、[]、{}、{[()]}、{()[]{}}这些都是合法的;
([)]、(]}这些都是不合法的。
用一个栈,输入一行括号序列,挨个读取,当读到左括号时('('、'['、‘{’)就把他入栈,然后继续读取;当读到右括号时(')'、']'、‘}’)就出栈,判断出栈的括号是否与当前的右括号匹配。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string,h>
/*
{()[]{}}、{[()]}都是正确的
([)]是错误的
*/
int main(){
char str[20];
char stack[20];
gets_s(str);//gets直接读入一行字符串,vs报错gets所以用gets_s
int len = strlen(str);
int top = 0;
for (int i = 0; i < len; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{')
stack[top++] = str[i];//入栈
else {
switch (str[i]) {//出栈
case ')':
if (stack[--top] != '(') {
printf("非法!\n");
return 0;
}
break;
case ']':
if (stack[--top] != '[') {
printf("非法!\n");
return 0;
}
break;
case '}':
if (stack[--top] != '{') {
printf("非法!\n");
return 0;
}
break;
}
}
}
printf("合法!\n");
return 0;
}