Joseph Cooper 2018-12-01 01:24 采纳率: 0%
浏览 500
已采纳

给出一段没有标点的文章,找出第n个单词的长度c语言问题,代码哪里错了?困扰半天了求大佬解答

  •     题目描述
    

    给出一段没有标点的文章,找出第n个单词的长度

  • 输入
    第一行一个数字,表示第n个单词( 0 < n < 104)
    第二行输入一段文章以回车结束(至少一个字符,每个单词长度 小于 104)

  • 输出
    输出一个数字

#include<stdio.h>
#include"string.h"
int main(void)
{
    char str[1000];
    int i,j,count,n,result=0,len;
    scanf("%d",&n);
    getchar();
    gets(str);
    count=1;
    len=strlen(str);

    for(i=0;i<len;i++)
    {
        if(str[i]==' '&&str[i+1]!=' ')
           {
            count++;
           }
        if(count==n)
        {
            for(j=i;str[j]!=' ';j++)
             {
                 if(str[j]!=' ')
                   {
                       result++;
                   }
             }

        }
    }
    printf("%d\n",result);

    return 0;
}

  • 写回答

1条回答 默认 最新

  • nacrt 2018-12-01 01:56
    关注

    // 仅供参考

    #include<stdio.h>
    #include"string.h"
    int main(void)
    {
        char str[1000];
        int i,j,count,n,result=0,len;
        scanf("%d",&n);
        getchar();
        gets(str);
        count=1;
        len=strlen(str);
    
        for(i=0;i<len;i++)
        {
            if(str[i]==' ' && str[i+1]!=' ')
           {
                count++;
           }
            if(count==n)
            {
                for(j= (i==0?i:i+1);str[j]!=' ' && j < len;j++) //如果不是第一个单词从空格后(i+1)开始取值 
                {
                    // printf("%c", str[j]);
                    result++;
                }
                break; // 满足条件跳出 
            }
        }
        printf("%d\n",result);
    
        return 0;
    }
    
    
    

    // 原代码,主要是要自己跟着程序走一遍才会知道问题所在,最好调试着看
    // 主要问题是 什么时候进入内层个循环,统计完单词后要跳出外层循环
    #include<stdio.h>
    #include"string.h"
    int main(void)
    {
        char str[1000];
        int i,j,count,n,result=0,len;
        scanf("%d",&n);
        getchar();
        gets(str);
        count=1;
        len=strlen(str);
    
        for(i=0;i<len;i++)  // 举例输入的是:str="aa bb cc dd" n=2
        {
            if(str[i]==' '&&str[i+1]!=' ') // 当i=2时 str[2]==空格,下面count++ count=2    当i=3时,str[3]='b'不满足条件,count=2不变    str[4]='b'不满足条件,count=2不变
               {
                count++;
               }
            if(count==n) //i=2时 count=2进入     i=3时count=2    i=4时count=2 
            {
                for(j=i;str[j]!=' ';j++) // i=2 str[2]=空格,条件不符合跳出循环    i=3时进入循环最终循环统计结果result=2(bb)此处统计应该跳出外层循环  而i=4时进入循环最终循环统计结果result=3(b)多余统计 
                 {
                     if(str[j]!=' ') // i=3 --> 会计数2个b result=2     i=4时会计数一个b result=3 
                       {
                           result++;
                       }
                 }
    
            }
        }
        printf("%d\n",result);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀