校赛B 长单词

 长单词
"我在马路边,捡到一毛钱,把它交到学长蜀黍手里边,学长问我志在何方,我说我要考英语八级!"。“考过还要考8.1级!”小杰最喜欢英语了,尤其是喜欢和他的小伙伴李有才比赛找长单词,他们比谁发现的单词最长。小杰找来了很多的报纸、杂志。看着满版的英文,李有才童鞋盘算着先故作痴呆来使对方大意,谁知走火入魔无法自拔,结果真成傻子了(其实我觉得他本来就挺傻的,你说呢?——审题者注)。你知道小杰为什么这么厉害吗?猜猜看?因为他有春哥的超级记忆力帮助啊!真的假的啊他这么叼学长蜀黍知道不?当然是真滴啊,不然怎么找的那么准!不对哦!记数字跟单词长度有毛关系啊!额。。因为他有聪明的你嘛!

Input
输入是一段英语文章。一段文章最多有 1000 个单词,每个单词的最大长度为100.)

Output
一个整数,表示这篇文章里最长的单词的长度。


Sample Input
EUREKA, Calif. (AP) - A powerful magnitude-6.9 earthquake struck Sunday night off the coast of Northern California, but there were no immediate reports of injury or damage and no danger of a tsunami, officials said. "I can come today," she said, "but not tomorrow."
Sample Output
13
HINT
文章中可能存在的标点有:
引号 "
逗号 ,
句号 .
括号 ()

连字符 -(连字符连起来的算作一个单词,例如样例中的 magnitude-6.9)



看到题,就感觉判断条件很模糊,比如  空格加 - 加个单词,这个-也算进去吗...  小数是个单词吗?什么时候标点算作是间断符?依靠我的判断试着提交了一下,居然过了。。。

方法倒不复杂,空格代替特定标点,然后记数,本来想边判断边记数的,感觉有点麻烦,不如这个好理解并且好编代码,而且也不会超时。

#include <stdio.h>
#include <stdlib.h>
#include<ctype.h>
#include<string.h>
int main()
{
    char a[100005];
    int i,j;
    gets(a);
    int n=strlen(a);
    if(!isalnum(a[0]))
        a[0]=' ';
    for(i=1; i<n-1; i++)
    {
        if(!isalnum(a[i]))
        {
            if(a[i]=='"'||a[i]==','||a[i]=='('||a[i]==')')
                a[i]=' ';
            else if((a[i]=='.')&&(!isdigit(a[i-1])||!isdigit(a[i+1])))
                a[i]=' ';
            else if((a[i]=='-')&&(!isalnum(a[i-1])||!isalnum(a[i+1])))
                a[i]=' ';
        }
    }
    if(!isalnum(a[n-1]))
        a[n-1]=' ';
     //puts(a);
    int count=0,max=0;
    for(i=0; i<n; i++)
    {
        if(a[i]!=' ')
            count++;
        else
        {
            if(count>max)
                max=count;
            count=0;
        }
    }
    printf("%d\n",max>count? max:count);
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值