0x01.问题说明
给出一个表达式,要求判断表达式中的括号是否匹配,比如((()))匹配,[)不匹配。
0x02.解决思路
凡遇到左括号,入栈,凡遇到右括号,与栈顶的括号比较,看是否匹配,如果有一个不匹配,那么整个表达式不匹配,如果匹配完后栈中还有元素,或者是匹配的时候栈空了,说明左右括号数量对不上,不匹配。
0x03.解决代码
#include<stdio.h>
#include<string.h>
#define SIZE 100
typedef struct
{
char data[SIZE];
int top;
}Stack;
Stack S;
int main()
{
S.top = 0;
char a[1000];
printf("请输入你需要检测的字符串:");
gets_s(a);
int i,len;
len = strlen(a);
for (i = 0; i < strlen(a); i++)
{
if (a[i] == '{' || a[i] == '}' || a[i] == '[' || a[i] == ']' || a[i] == '(' || a[i] == ')')
{
if (a[i] != '}' && a[i] != ']' && a[i] != ')')
{
S.data[S.top++] = a[i];
}
else
{
switch (a[i])
{
case '}':
{
if (S.data[S.top - 1] == '{')
{
S.top--;
break;
}
else break;
}
case ']':
{
if (S.data[S.top - 1] == '[')
{
S.top--;
break;
}
else break;
}
case ')':
{
if (S.data[S.top - 1] == '(')
{
S.top--;
break;
}
else break;
}
default: break;
}
}
}
}
printf("此时左括号栈中还有 %d 个元素!!!\n",S.top);
if (S.top)
{
printf("你输入的括号不匹配!!!");
}
else
{
printf("你输入的括号匹配!!!");
}
return 0;
}