给定n个关键词,和m句借口。
找出哪句借口中有最多的关键词。不论大小写。
我先关键词存入一个string数组中,再把每句话中出现的单词存入一个string数组中。然后依次比较,统计出现过的次数。
#include<cstdio>
#include<ctype.h>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
const int MAXN=30;
int counter[MAXN];
string cmp[MAXN];
string a[MAXN];
string p[MAXN];
int main()
{
// freopen("in.txt","r",stdin);
int K,L,count1=0;
while(~scanf("%d%d",&K,&L)){
getchar();
memset(counter,0,sizeof(counter));
count1++;
int n=0,max=0;
for(int i=0;i<K;i++)
getline(cin,a[i]);
for(n=0;n<L;n++){
getline(cin,p[n]);
int lp =p[n].length(),m=0;
bool ok=false;
if(isalpha(p[n][0])) {ok=true;cmp[m]+=tolower(p[n][0]);}
for(int i=1;i<lp;i++){
if(isalpha(p[n][i])) ok=true;
if(!isalpha(p[n][i])){ //这地方不为字母,并且上一个为字母才会m++
ok=false;
if(isalpha(p[n][i-1])) m++; //m表示将该字符存入哪个字符串中
}
if(ok) cmp[m]+=tolower(p[n][i]);
}
for(int i=0;i<K;i++){
for(int j=0;j<m;j++){
if(a[i]==cmp[j]){
counter[n]++;
}
}
}
if(counter[n]>=max) max=counter[n];
for(int i=0;i<m;i++) cmp[i].clear();
}
printf("Excuse Set #%d\n",count1);
for(int i=0;i<L;i++)
if(counter[i]==max) cout<<p[i]<<'\n';
printf("\n");
}
return 0;
}