69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
/*
递归函数
参数:字符数组指针
返回值:返回括号合格括号的层数
ex: () 返回1, [[]]返回2
*/
int digui( char *p )
{
int r = 0; //当前括号层数总计数
char sign = 0; //对应的括号符号
switch( *p++ )
{
case '(': sign = ')'; break;
case '[': sign = ']'; break;
//case '{': sign = '}'; break;
default: return 0; //不是以前括号开头则返回
}
while( *p != sign )
{
int re; //递归返回值
re = digui( p );
if ( re == 0 ) return 0;
p += re * 2; //跳过括号层数
r += re;
}
return ( r + 1 );
}
/*主函数*/
int main()
{
char s[5][64] = { "()()", "([][])", "([)])", "([(()()())]([]()))", "([[]]]())" };
int i;
for( i = 0; i < 5; ++i )
{
int r = digui(s[i]);
if( r == 0 || s[i][r*2] != '\0' ) printf( "no\n" );
else printf( "yes\n" );
}
return 0;
}