题意:简单题,读懂题目就很好写了,这里要说的是,题目并没有叙述每句话里的单词长度是多少,所以导致我的数组开小了,一直SF,后来把数组开大后就A了
先给出一组单词,然后在给出几个句子,输出包含给定单词数量最多的句子。这次考验基础,就是单词与单词的分隔不仅仅只是空格还有别的符号
#include<stdio.h>
#include<string.h>
struct Node
{
char key[21];
}node[21];
struct Ans
{
char ss[100];
int count;
}ans[21];
void Str2str(char ss[])
{
for (int i=0;ss[i];i++)
{
if(ss[i]>='A' && ss[i]<='Z') ss[i]+=32;
}
}
int main()
{
int n,k,i,j,t;
char word[100];//储存句子中的单词,数组一定要开大
int tes=1;
while(scanf("%d%d",&n,&k)!=EOF)
{
int max=0;
getchar();
memset(ans,0,sizeof(ans));
for (i=0;i<n;i++)
{
gets(node[i].key);
}
int cas=0;
int flag=0;
for (i=0;i<k;i++)//有几句话
{
gets(ans[i].ss);
int leng=strlen(ans[i].ss);
for (j=0;j<=leng;j++)//找有几个单词
{
if((ans[i].ss[j]<'A' || ans[i].ss[j]>'z' || (ans[i].ss[j]>'Z' && ans[i].ss[j]<'a') || j==leng) && flag==1)//判断是否已经构成一个新单词
{
flag=0;
word[cas]='\0';
cas=0;
Str2str(word);
for (t=0;t<n;t++)
{
if(!strcmp(word,node[t].key)) ans[i].count++;
}
}
else { word[cas++]=ans[i].ss[j]; flag=1; }
}
if(ans[i].count>max) max=ans[i].count;
}
printf("Excuse Set #%d\n",tes++);
for (i=0;i<k;i++)
{
if(ans[i].count==max) printf("%s\n",ans[i].ss);
}
printf("\n");
}
return 0;
}