输入一个中缀表达式,判断其输入的括号是否正确匹配
思路
每当碰到左括号‘(’、‘[’、‘{’,将括号入栈。
每当碰到右括号‘)’、‘]’、‘}’,将栈顶括号输出,判断是否与该右括号匹配。
最终栈中不存在括号,即括号匹配。
代码实现
#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(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;
}