统计字符串中最长单词的长度!C语言~~

如题所述

你的程序有以下几个逻辑错误:
1、用
if(str[i]>='A'&&str[i]<='z')
判断是否是字母。
字母在ASCII中不是连续的,
大写字母A-Z
为65-90
小写字母a-z
为97-132
所以之间会有6个字符(他们是[
\
]
^
_
`
)也被你当做单词的组成部分被计入长度。
2、当一个单词没有以非字母结束时,最后一个else没有被执行到,所以max的值仍然是
上一次读到的最长单词长度,
所以最后输出时要再判断一下max和count的大小,输出大的那个。
帮你修改后的程序如下:
#include
main()
{char
str[100];
int
max=0,count=0,i;
printf("Input
a
string:\n");
gets(str);
for(i=0;str[i];i++)
{
if(str[i]>='A'&&
str[i]<='Z')
{
count++;
}
else
if(
str[i]>='a'&&
str[i]<='z'
)
{
count++;
}
else
{
if(max
count)
printf("%d",max);
else
printf("%d",count);
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-27
if(str[i]>='A'&&str[i]<='z')
这句有点问题,
Z和a之间还有一些字符,
应该排除掉
这个程序的主要问题是当读到最后一个字符NULL时,
for循环退出,
这时,
count的值对应最后一个单词,
而这时这个单词的长度没有进入for中的else进行比较,从而max的值会不对.
所以你再在for后面加几句代码比较一次就可以了.
相似回答