写一程序,输入一行字符,将此字符串中最长的单词输出的问题

lostsix 2004-04-01 09:52:02
#include <stdio.h>
main()
{
int alphabetic(char);
int longest(char []);
int i;
char line[100];
printf("Input one line:\n");
gets(line);
printf("The longest word is :");
for(i=longest(line);alphabetic(line[i]);i++)
printf("%c",line[i]);
printf("\n");
}

int alphabetic(char c)
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
return(1);
else
return(0);
}

int longest(char string[])
{
int len=0,i,length=0,flag=1,place=0,point;
for(i=0;i<=strlen(sting);i++) /*若结束条件改为string[i]!='\0'就出现问题*/
if(alphabetic(string[i]))
if(flag)
{
point=i;
flag=0;
}
else
len++;
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
len=0;
}
}
return(place);
}

大家帮我看看longest函数循环结束条件 个人认为for(i=0;i<=strlen(sting);i++)和for(i=0;string[i]!='\0';i++)实现的功能是一样的
...全文
824 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lostsix 2004-04-01
  • 打赏
  • 举报
回复
明白了 谢谢^^
rorot 2004-04-01
  • 打赏
  • 举报
回复
而你使用strlen(string)的时候,关键就在于你的循环结束条件是i<=strlen(string),这个就是当string[i]即使是'\0'还能满足循环条件,从而不满足你的if(alphabetic(string[i]))
,进入else,用当前的len去改变length,并且改变了place。
但是你的string[i] != '\0' ,让字符串的最后一个单词根本就没有进入if(alphabetic(string[i]))为假的机会。
rorot 2004-04-01
  • 打赏
  • 举报
回复
知道原因啦。
--------------
for(i=0; string[i] != 0; i++)
{
if(alphabetic(string[i]))
if(flag)
{
point=i;
flag=0;
}
else
{
len++;

}
else
{
flag=1;
if(len>length)
{
length=len;
place=point;
len=0;
}
}
printf( "%d\n", i );
}

在你使用string[i] != '\0'条件下,由于当字符检测到'\0'就不再进入你的for()循环,所以由于你的student单词一直是alphabetic(string[i])为真。所以最后一个单词根本就没有机会进入
else
{
flag=1;
if(len>length)
{
length=len;
place=point;
len=0;
}
}
这层循环来改变你的place和len参数。从而导致你的"I am a student"的最长是"am"
rorot 2004-04-01
  • 打赏
  • 举报
回复
你用的第二个条件下,最后没有进入你的最后一个else
正在调试中。。。。
lostsix 2004-04-01
  • 打赏
  • 举报
回复
如果我输入字符串"i am a student" ,'\0'在t的后面 这和用strlen(string)计算的循环次数是一样的 而在程序中并没有修改或添加删除'\0'的地方
但是用for(i=0;i<=strlen(sting);i++)和for(i=0;string[i]!='\0';i++)来计算i am a student最长的单词分别是student和am 不知道第2个条件问题出在哪?
rorot 2004-04-01
  • 打赏
  • 举报
回复
不一样。
strlen(string) 的string[i]可以一直达到'\0'还不退出循环,只有在'\0'的下一个才退出
string[i] != 0 的string[i]碰到'\0'就退出循环了.
lostsix 2004-04-01
  • 打赏
  • 举报
回复
没用
HitXU 2004-04-01
  • 打赏
  • 举报
回复
先给数组line初始化为0看看

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧