C语言编程:写一个函数,输入一行字符,将此字符串中最长的单词输出.

为什么当最长的单词出现在最后一个就不能输出
#include
#include
void f(char m[],int n)
{
int i,count=0,r=0,s=0;
for(i=0;i<=n;i++)
{
if(m[i]!=' ')
{
count++;
}
else if(m[i]==' '||m[i]=='\0')
{
if(r<count)
{
r=count;
s=i-1;
}
count=0;
}
}
for(i=s-r+1;i<=s;i++)
{
printf("%c",m[i]);
}
}
int main()
{
char a[100];
gets(a);
int len=strlen(a);
f(a,len);
printf("\n");
return 0;

}

假设输入为a bc, strlen函数返回值为4

这样在第一个for循环中m[4]也会被判断,而m[4]不等于空格是成立的,所以conut结果为3,显然是不对的,应该是bc的长度2

 if(m[i]!=' ')
{
    count++; 
}

修改后的代码如下:

void f(char m[], int n)
{
    int i, count = 0, r = 0, s = 0;
    for (i = 0;i <= n ;i++)
    {
        if (m[i] != ' ' && m[i] != '\0') //此处为重新修改判断条件
        {
            count++;
        }
        else 
        {
            if (r<count)
            {
                r = count;
                s = i - 1;
            }
            count = 0;
        }
    }
    for (i = s - r + 1;i <= s;i++)
    {
        printf("%c", m[i]);
    }
}
int main()
{
    char a[100];
    gets(a);
    int len = strlen(a);
    f(a, len);
    printf("\n");
    return 0;
}

图片说明

http://blog.sina.com.cn/s/blog_928f4ae00101282r.html