/**************************************************************************************
* Function : 括号匹配
* Create Date : 2014/05/16
* Author : NTSK13
* Email : beijiwei@qq.com
* Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
* 任何单位和个人不经本人允许不得用于商业用途
* Version : V0.1
题目: 经典c程序(0027)---括号匹配
现在,有一行括号序列,请你检查这行括号是否配对。
输入 :
第一行输入一个数N(0<N<=100),表示有N组测试数据。
后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),
测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出 :
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入 :
3
[(])
(])
([[]()])
样例输出 :
No
No
Yes
**************************************************************************************/
#include<stdio.h>
// 测试数据可自由修改
#define COUNT 5
#define LENGTH 50
static char brackets_array[COUNT][LENGTH] =
{
"[(])",
"(])",
"([[]()])",
"([[](((()[])))[[()]]](([[()]])))",
"([[](((()[[])))[[()]]]](([[()]])))",
};
int run_test(char* pBracketString);
int main(void)
{
int i = 0;
for ( i = 0; i < COUNT; i++)
{
if (run_test(brackets_array[i]))
{
printf("Yes");
}else
{
printf("No");
}
printf("\n");
}
}
int run_test(char* pBracketString)
{
char *ptmp=pBracketString;
int k=0,len=0;
char stack[LENGTH/2]={'\0'};
while(*ptmp !='\0')
{
ptmp++;
len++;
}
//printf("len=%d len%2=%d\n",len,len%2);
if( len%2 )//长度为奇数
return 0;
else
{
ptmp=pBracketString;
while(*ptmp !='\0')
{
#if 1
switch(*ptmp)
{
case '(':
case '[':
stack[k++]=*ptmp;
break;
case ')':
if( stack[k-1] =='(' )
stack[--k]='\0';
else
return 0;
break;
case ']':
if( stack[k-1] =='[' )
stack[--k]='\0';
else
return 0;
break;
default:
break;
}
ptmp++;
}
if(stack[0]=='\0')
return 1;
else
return 0;
#else
if( *ptmp=='(' || *ptmp=='[' )
{
stack[k++]=*ptmp;
ptmp++;
continue;
}
if( *ptmp==')' && stack[k-1] =='(' )
{
stack[--k]='\0';
ptmp++;
continue;
}
if( *ptmp==')' && stack[k-1] !='(' )
return 0;
if( *ptmp==']' && stack[k-1] =='[' )
{
stack[--k]='\0';
ptmp++;
continue;
}
if( *ptmp==']' && stack[k-1] !='[' )
return 0;
ptmp++;
}
if(stack[0]=='\0')
return 1;
else
return 0;
#endif
}
}
经典c程序(0027)---括号匹配
最新推荐文章于 2023-08-09 21:30:50 发布