//各位看看哪里不对。。。WA啊!
#include <stdio.h>
#include <string.h>
int nkey;
int nexc;
char keywords[30][30];
char excuses[30][100];
int excTimes[30];
int findInexc(int order)
{
int i,j,k,key_len,exc_len;
char str[100];
strcpy(str,excuses[order]);
exc_len=strlen(str);
for(i=0;i<exc_len;i++)//借口全部转换为小写
{
if('A'<=str[i] && str[i]<='Z')
str[i]=str[i]+32;
}
for(i=0;i<nkey;i++)//遍历每个关键字,在excuses[order]中寻找,若找到了,则excTimes[order]++
{
key_len=strlen(keywords[i]);
for(j=0;j<exc_len;j++)
{
for(k=0;k<key_len;k++)
{
if(keywords[i][k]==str[j+k])
continue;
else
break;
}
if(k==key_len)
excTimes[order]++;
}
}
return 0;
}
int display()
{
int i,j;
for(i=0;i<nexc-1;i++)//先冒泡排序,找出出现的最大的次数
{
for(j=nexc-1;j>i;j--)
{
if(excTimes[j]>excTimes[j-1])
{
int tmp=excTimes[j];
excTimes[j]=excTimes[j-1];
excTimes[j-1]=tmp;
char tmpstr[100];
strcpy(tmpstr,excuses[j]);
strcpy(excuses[j],excuses[j-1]);
strcpy(excuses[j-1],tmpstr);
}
}
}
i=0;//输出最大次数对应的借口
do
{
printf("%s\n",excuses[i]);
i++;
}while(excTimes[i]==excTimes[i-1] && i<nexc);//如果有并列最大的则也输出
return 0;
}
int main()
{
int i,j=1;
while(scanf("%d %d",&nkey,&nexc)!=EOF)
{
memset(excTimes,0,sizeof(excTimes));//初始化数组为0,这个数组表示每个关键字在每句话中出现的次数
for(i=0;i<nkey;i++)
scanf("%s",keywords[i]);
getchar();
for(i=0;i<nexc;i++)
gets(excuses[i]);
for(i=0;i<nexc;i++)
findInexc(i);//开始构造excTimes数组
printf("Excuse Set #%d\n",j);
j++;
display();//显示结果
printf("\n");
}
return 0;
}