a839419160 2017-04-17 14:50 采纳率: 0%
浏览 8435

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;

}

  • 写回答

2条回答

  • 战在春秋 2017-04-17 22:46
    关注

    假设输入为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;
    }
    

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3