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 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码