求字符串中最长单词

PinesCheung 2014-04-25 07:37:35
谭浩强C程序设计第四版第七章习题里面有一个题目:
写一个函数,输入一行字符,将此字符中最长的单词输出。
在谭浩强C程序设计第四版学习辅导一书中给出了答案,但是我有些疑问
书上这么说的:设函数longest作用是找最长单词的位置,函数返回值是该行字符中最长单词的起始位置。
longest函数的流程图如下



其中flag表示单词是否已开始,flag=1表示单词开始,flag=0表示单词未开始;len表示当前单词已累计的字母个数;length代表先前单词中最长单词的字母个数;point表示当前单词的起始位置(用下标表示);place表示最长单词的起始位置。函数alphabetic的作用是判断当前字符是否是字母,若是则返回1,不是返回0

对于longest函数我有些疑问,流程图中划线部分是不是应该为:flag=1 ?

代码如下:

#include <stdio.h>
#include <string.h>
int main(void)
{
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");
return 0;
}

int alphabetic(char c)
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return 1;
else
return 0;
}
int longest(char string[])
{
int i,len=0,length=0,place=0,point,flag=1;
for(i=0;i<=strlen(string);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;
}
}
}
return place;
}


是我理解错了还是答案错了,我感觉划线的地方flag=1,而不是flag=0
希望得到大家指教。
...全文
527 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sid-fate 2014-04-27
  • 打赏
  • 举报
回复
引用 5 楼 u014289671 的回复:
[quote=引用 1 楼 u014639175 的回复:] 是的,确实有错,两个flag的位置刚好要换一下
是图中的和②互换吗? [/quote] 对,而且①下面那个flag=0 也改为 flag=1
707wk 2014-04-26
  • 打赏
  • 举报
回复
这种问题自己编译一下不就知道了吗,最开始我用的是盗版的《c语言程序设计》(学校发的),里面代码有些错误,然后自己编译就解决问题了
lm_whales 2014-04-26
  • 打赏
  • 举报
回复
哦,单词,不是串
lm_whales 2014-04-26
  • 打赏
  • 举报
回复
根据代码,第一应该是 flag ==1 ,不是flag ==0 第二个flag =1 是没有问题的 flag = 1; 注意这不是条件,而是代码本身。 流程图的这一部分,直接用代码表示了 另外,len>length 写成 len >= length和代码不符合,倒也实也没大的错误 不过 > 得到最前面的那个最长的字符串 >= 得到最后面的那个最长的字符串
PinesCheung 2014-04-26
  • 打赏
  • 举报
回复
引用 1 楼 u014639175 的回复:
是的,确实有错,两个flag的位置刚好要换一下


是图中的①和②互换吗?
PinesCheung 2014-04-26
  • 打赏
  • 举报
回复
谭浩强的书啊。。。
罗博士 2014-04-25
  • 打赏
  • 举报
回复
谭老师的书,大家都呵呵呵呵 ……
Sid-fate 2014-04-25
  • 打赏
  • 举报
回复
是的,确实有错,两个flag的位置刚好要换一下

69,364

社区成员

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

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