开发者社区> 问答> 正文

求教代码哪里出问题,wrong answer不知为什么,谢谢!

输入
一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式
输出
该句子中最长的单词。如果多于一个,则输出第一个
样例输入
I am a student of Peking University.
样例输出
University

#include <stdio.h>
#include <string.h>
int main(void)
{

    char ch[200][20];
    int len[200]; // 每个单词的长度
    int max = 0, i = 0; // 最长单词、循环变量
    int max_i = 0; //最长单词的index

    for (i = 0; ; ++i)
    {
        scanf("%s", ch[i]);
        len[i] = strlen(ch[i]);
        if (len[i] > max)
        {
            max = len[i];
            max_i = i;
        }
        if (ch[i][len[i] - 1] == '.')
            break;

    }
int l = strlen(ch[max_i]);
if (ch[max_i][l-1] != '.')
{
    printf("%s\n", ch[max_i]);
}
else
{
    ch[max_i][l-1] = '\0';
    printf("%s\n", ch[max_i]);
}
    return 0;
}

展开
收起
a123456678 2016-06-07 18:12:27 1705 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista

    找到原因了a b cdd eff.会输出eff,应该输出第一个最长的,
    这里eff就是最长的,因为我把标点符号算到长度里去了。

    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
        char ch[200][20];
        int len[200];
        int max = 0;
        int max_i = 0, i = 0;
    
        for (i = 0; ; ++i)
        {
            scanf("%s", ch[i]);
            len[i] = strlen(ch[i]);
            if (len[i] > max)
            {
                max = len[i];
                max_i = i;
            }
            if (ch[i][len[i] - 1] == '.')
            {
                ch[i][len[i] - 1] = '\0';
                break;
            }
        }
        int k = strlen(ch[max_i]);
    
        for ( i = 0; i <= max_i; ++i)
        {
            if (len[i] == k)
            {
                max_i = i;
            }
        }   
        printf("%s\n", ch[max_i]);
        return 0;
    
    }
    2019-07-17 19:30:38
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载