括号类型在这里有三种:[] { } ( )
编写括号类型是否匹配
在这里用到堆栈,当临近的括号匹配时,将匹配的部门括号去掉,再判断剩余的是否匹配。
下面的代码为C语言代码,经过电脑运行测试没有问题。
#include
char stack[100];
int top=-1;
void push(char ch)
{
stack[++top] = ch;
}
void pop()
{
top--;
}
bool empty()
{
if(top == -1)
return true;
else
return false;
}
char getTop()
{
return stack[top];
}
int main()
{
char str[100] = "(fd)fa[a]{df[ad(da)d]}da(da)";
int i = 0;
while(str[i] != '\0')
{
switch(str[i])
{
case '(':
case '[':
case '{': push(str[i]); break; //若为左括号,入栈
case ')':
if(empty())
{
puts("匹配不通过");
return 0;
} //若第一个字符即为右括号,则一定不匹配
else
{
if(getTop() == '(')
pop(); //若匹配成功,删除栈顶元素
break;
}
case ']':
if(empty())
{
puts("匹配不通过");
return 0;
}
else
{
if(getTop() == '[')
pop(); //若匹配成功,删除栈顶元素
break;
}
case '}':
if(empty())
{
puts("匹配不通过");
return 0;
}
else
{
if(getTop() == '{')
pop(); //若匹配成功,删除栈顶元素
break;
}
}
i++;
}
if(empty())
puts("匹配通过"); //入栈出栈时都应为空,则匹配通过
else
puts("匹配不通过");
return(0);
}