九度-1165 字符串匹配

来源:互联网 发布:爱淘宝流量 编辑:程序博客网 时间:2024/06/03 17:52
题目描述:

    读入数据string[ ],然后读入一个短字符串。要求查找string[ ]中和短字符串的所有匹配,输出行号、匹配字符串。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。

输入:

输入有多组数据。
每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(不含空格),接下来输入一个匹配字符串。

输出:

输出匹配到的字符串的行号和该字符串(匹配时不区分大小写)。

样例输入:
4Aaba2BabABBa[a2b]b
样例输出:
1 Aab2 a2B4 ABB

代码:

# include <stdio.h># include <string.h>char s1[1000][100];char s2[1000][100];void trans(char*a,char*b){  int len,i;  len=strlen(a);  for (i=0;i<len;i++)if (a[i]>='A'&&a[i]<='Z')  b[i]=a[i]+32;    else  b[i]=a[i];  b[i]='\0';}int main (){  int n,i,j,k,p,lin1,lin2,f,f2,is[100];  char in1[100],in2[100];  while (scanf ("%d",&n)!=EOF)  {    for (i=0;i<n;i++){  scanf ("%s",s1[i]);  trans(s1[i],s2[i]);  is[i]=0;}scanf ("%s",in1);trans(in1,in2);    lin2=lin1=strlen(in2);for (i=0,f=0;i<lin1;i++)    {      if (in2[i]=='[')f=1;  else if (f==1)lin2--;  if (in2[i]==']')f=0;}for (i=0;i<n;i++){  if (strlen(s2[i])==lin2)  {        for (k=0,p=0,f=0;k<lin2;){          if (in2[p]=='[')  {            p++;f=1;f2=0;  }  else if (in2[p]==']')  {p++;f=0;if (f2==0)  break;  }  else if (f==0&&s2[i][k]==in2[p])  {            p++;k++;  }  else if (f==1&&s2[i][k]==in2[p])  {f2=1;k++;while (in2[p]!=']')  p++;  }  else if (f==0&&s2[i][k]!=in2[p])break;  else if (f==1&&s2[i][k]!=in2[p])    p++;  if (p==lin1)  {is[i]=1;break;  }}  }    }for (i=0;i<n;i++)  if (is[i]==1)printf ("%d %s\n",i+1,s1[i]);  }  return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深度伤口换药疼痛怎么办 孕妇肛门有蛲虫怎么办 孕妇上火拉血怎么办 孕期内检出血怎么办 顺产肛门脱肛了怎么办 怀孕痔疮老脱出怎么办 顺产后浑身酸疼怎么办 爬山后肌肉酸疼怎么办 手上打针胳膊疼怎么办 狗 打针后疼痛怎么办 流产后浑身酸疼怎么办 屋子里潮湿有味怎么办 墙潮湿发霉有味怎么办 当兵体检没有过怎么办 航空面试有纹身怎么办 儿童眼睛外斜视怎么办 大疆imu异常怎么办 新生儿血液回流不好怎么办 灌肠温度高了怎么办 炎症引起的咳嗽怎么办 90岁老人肠梗阻怎么办 84岁老人肠梗阻怎么办 婴儿开塞露后大便肚子疼怎么办 孕早期用开塞露肚子疼怎么办 冰点脱毛后刺痛怎么办 医院建不上档怎么办 dnf输入变繁体怎么办 机械钟表不走了怎么办 火柴枪卡住了怎么办 dnf卖掉的东西怎么办 mac恢复备份失败怎么办 割的双眼皮凹陷怎么办 公司聚餐不想去怎么办 左前分支阻滞怎么办 新电脑特别卡怎么办 夜神安卓模拟器网络没有怎么办 电脑磁盘占用率100怎么办 逆战没有语音怎么办 qt语音登陆不了怎么办 电脑无法识别键盘怎么办 金立f106耗电快怎么办