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;
}
posted @ 2012-06-28 11:54  calmound  阅读(360)  评论(0编辑  收藏  举报