题目描述
给出一段没有标点的文章,找出第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;
}
// 仅供参考
#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;
}