题目:请写一个程序,判断给定表达式中的括号是否匹配。表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。
输入说明
有多个表达式,每个表达式占一行。当输入的表达式为空字符串(长度为0)时表示输入结束
输出说明
对每个表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。
这道题老师说有些超纲了,因为涉及数据结构的问题,但我应该没用数据结构的内容。。
主要的难点其实是嵌套使用的判断,而方法有点类似于消消乐:如果有配对的就消去。代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,count;
char s[50],s1[20],s2[20];
while(1)
{
gets(s);
if(strlen(s)==0) break;
count=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]=='('||s[i]==')'||s[i]=='['||s[i]==']'||s[i]=='{'||s[i]=='}')
s1[count++]=s[i];
}
for(i=0,j=0;i<count;i++,j++)
{
s2[j]=s1[i];
if(i>0)
{
if(s2[j]==']'&&s2[j-1]=='[')
{
j = j - 2;
}
else if(s2[j]=='}'&&s2[j-1]=='{')
{
j=j-2;
}
else if(s2[j]==')'&&s2[j-1]=='(')
{
j=j-2;
}
}
}
if(j==0)
puts("yes");
else
puts("no");
}
return 0;
}
这题据说与栈有关,我们还没学,所以应该是没用到。但是目前这个方法的思路与实施没接触过真的有些难想到。。
欢迎交流探讨。
谢谢。