数据结构实验之栈与队列四:括号匹配
Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Sample
Input
sin(20+10)
{[}]
Output
yes
no
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[60], b[60];
int i, len,p;
while (gets(a))
{
len = strlen(a);
p = 0;
for (i = 0; i < len; i++)
{
if (a[i] == '(' || a[i] == '{' || a[i] == '[')//先将左括号存起来
{
b[++p] = a[i];
}
else /*出现右括号时,如果与该右括号紧贴的左面是可以与之匹配的左括号,即可将此时栈顶的左括号弹出,如果不可以匹配,则直接break跳出,
后面不需再看(匹配是紧贴的括号匹配),++p是为了防止第一个出现的括号就是右括号*/
{
if (a[i] == ')')
{
if (b[p] == '(')
{
p--;
}
else
{
b[++p] = a[i];
break;
}
}
else if (a[i] == ']')
{
if (b[p] == '[')
{
p--;
}
else
{
b[++p] = a[i];
break;
}
}
else if (a[i] == '}')
{
if (b[p] == '{')
{
p--;
}
else
{
b[++p] = a[i];
break;
}
}
}
}
if (p == 0)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
}
当输入没有具体停止标记时,或输入很长时,要用while(gets(s))来判断!