UVa OJ 409

1、这个程序刚开始交上去是runtime error,后来我把char型的三个数组初始化一下就AC了。

2、原因可能是我的编译器会给程序初始化而OJ上的不会,于是数组里读到了一些莫名其妙的东西(具体是什么我也猜不到)于是就越界了,所以初始化很重要。

3、scanf(“%s”)读入的时候并不会把后面用\0覆盖掉,应该是读到哪覆盖到哪,然后再后面给数组加个\0。

4、程序有一个小小的漏洞,如果所读句子在回车前最后一个字符是字母,则数组a不会被清空。好在所有数据都是标点符号结尾。

5、strcmp是两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止,所以至少要保证一个字符有\0结尾。如果都没有,而且前面字符都相同,我也不知道会发生什么。

#include<stdio.h>
#include<string.h>
#include<ctype.h>
int m,n,i,ch,j;
char s[30][30]={""},a[30]="",sen[30][80]={""};
int p=0,count=0,sum[30]={0};
int main(void)
{
    while(scanf("%d%d",&m,&n)==2)
    {
        int max=0;
        count++;
        for(i=0;i<m;i++)
            scanf("%s",s[i]);
        getchar();
        for(i=0;i<n;i++)
        {
            int q=0;
            fgets(sen[i],100,stdin);
            while((ch=sen[i][q++])!='\n')
            {
                ch=tolower(ch);
                if(!isalpha(ch))
                {
                    for(j=0;j<m;j++)
                       if(strcmp(a,s[j])==0)
                           sum[i]++;
                       memset(a,'\0',sizeof(a));p=0;
                }
                else
                    a[p++]=ch;
            }
        }
            for(j=0;j<n;j++)
                if(max<sum[j]) max=sum[j];
            printf("Excuse Set #%d\n",count);
            for(j=0;j<n;j++)
                 if(sum[j]==max)
                    printf("%s",sen[j]);
            printf("\n");
        memset(sum,0,sizeof(sum));
        memset(sen,'\0',sizeof(sen));
        memset(s,'\0',sizeof(s));
    }
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值