zoj 1315 Excuses, Excuses!

题意:简单题,读懂题目就很好写了,这里要说的是,题目并没有叙述每句话里的单词长度是多少,所以导致我的数组开小了,一直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;

}

你可能感兴趣的:(ZOJ)