题目:
注意:(1)短字符串中可能有多个【】;
(2)【】中的字符仅匹配到其中一个即可;
示例:
解答:
#include <stdio.h>
#include <string.h>
int invert(char s) //统一转化为大写字母的数字表示
{
if(s>='a'&&s<='z')//a为97,A为65
return s-32;
else
return s;
}
int main()
{
int n,i,j,k,lent,lens,m=0,flag;//m括号个数
char s[1005][20],t[20],temp[10][20];//t为含中括号的模式串
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&s[i]);
}
scanf("%s",&t);
lent=strlen(t);
for(i=0;i<n;i++)
{
lens=strlen(s[i]);
for(j=0,k=0;(j<lent)&&(k<lens);j++,k++)
{
if(t[j]=='[')
{
flag=0;//flag初始化,flag=1表示为匹配成功
while(t[j]!=']')
{
if(invert(t[j])==invert(s[i][k]))//匹配成功,括号里存在一次匹配成功即可
flag=1;
j++;
}
if(!flag)
break;
}
else if(invert(t[j])!=invert(s[i][k]))
break;
}
if(j==lent)
printf("%d %s\n",i+1,s[i]);
}
}