工科男 发表于 2016-7-27 07:20:52

一句话中输出的最长单词

本帖最后由 工科男 于 2016-7-27 07:32 编辑

如题,输出一句话中的最长单词,在网上看了一段代码,刚好就是指针函数的调用,目前学到这一块,就拿来调试一下,我能看到的,可以改到的地方都改了,但是结果却不对,我也搞不懂问题出在哪里了。请帮忙看一下。
#include<stdio.h>
void input(char s[])
{
        int k=0;
        int c;
    for(;(c=getchar())!='\n';k++)
        {
      s=c;
    }
    s='\0';                                     //读取完成,记得对这个字符数组封口
}
char* findmax(char s[])
{
   int max=0,word_length=0,p=0,k=0;                //这个p是用来记录最长单词的位置
   
   char longest_word;
   for(k=0;s!='\0';k++)
        {
      if(s==' ')
                {                                          //扫到空格,则结算是否为最长的单词
         if(max<word_length)
                   {
               max=word_length;
                p=k;
            }
            word_length=0;
      }
      else
                {                                           //如果i扫到的不是空格,那么开始计算单词的长度
            word_length++;
      }
   }
if(max<word_length)
        {                                                   //此乃用于最长的单词在结尾的情况
      max=word_length;
      p=k;
        }
   
    for(p=p-max,k=0;max>0;max--,p++,k++)
        {
      longest_word=s;
    }
    longest_word='\0';
    return longest_word;
}
intmain()
{
    char s;
        char* longest_word=findmax(s);
    printf("Enter a String,please:\n");
    input(s);   
   
    printf("The longest word is:%s\n",longest_word);
        return 0;
}

又给大家添麻烦了,我什么时候可以出师啊,道阻且长!!!!

小剑剑 发表于 2016-7-27 15:14:45

本帖最后由 小剑剑 于 2016-7-27 15:16 编辑

21行到26行好像word_length的位置放错了,只能帮你到这了{:10_277:}
if(max<word_length)

                  {
          max=word_length;

            p=k;
word_length=0;
       }


工科男 发表于 2016-7-27 16:46:58

小剑剑 发表于 2016-7-27 15:14
21行到26行好像word_length的位置放错了,只能帮你到这了

谢谢你的热心哦,只是试了一下,没有任何结果

小科比 发表于 2016-7-27 17:37:45

不错不错

ljd884497 发表于 2016-7-27 18:14:47

char longest_word;这句是在findmax()内声明的,你return longest_word意思是返回了一个地址,但函数结束后,局部变量longest_word内存里的字符串已经释放,无法引用,你犯了一个C语言的大忌。

工科男 发表于 2016-7-27 22:18:13

ljd884497 发表于 2016-7-27 18:14
char longest_word;这句是在findmax()内声明的,你return longest_word意思是返回了一个地址,但函 ...

那该如何修改??

小剑剑 发表于 2016-7-28 18:58:40

本帖最后由 小剑剑 于 2016-7-28 19:04 编辑

工科男 发表于 2016-7-27 22:18
那该如何修改??

楼上正解,我一开始没细看没注意
第一你可以在findmax函数中就输出
第二你可以把最长的字符串复制到s,在main函数中输出s
第三你可以查一下malloc这个函数



这是我稍微修改了一下的代码,试了两次正确,试试能不能自己按上面思路改回来,在对比一下
#include<stdio.h>
#include <string.h>         //strcpy函数在这
void input(char s[])
{
      int k=0;
      int c;
    for(;(c=getchar())!='\n';k++)
      {
      s=c;
    }
    s='\0';                                     //读取完成,记得对这个字符数组封口
}
char* findmax(char s[])
{
   int max=0,word_length=0,p=0,k=0;                //这个p是用来记录最长单词的位置
    char *longest_word=malloc(255);            //malloc函数
   for(k=0;s!='\0';k++)
      {
      if(s==' ')
                {                                          //扫到空格,则结算是否为最长的单词
         if(max<word_length)
                   {
               max=word_length;
                p=k;
                word_length=0;                           //这里我放了进来
            }
      }
      else
                {                                           //如果i扫到的不是空格,那么开始计算单词的长度
            word_length++;
      }
   }
if(max<word_length)
      {                                                   //此乃用于最长的单词在结尾的情况
      max=word_length;
      p=k;
      }

    for(p=p-max,k=0;max>0;max--,p++,k++)
      {
      longest_word=s;
    }
    longest_word='\0';
    strcpy(s,longest_word);
    printf("The longest word is:%s在findmax中输出\n",longest_word);    //可以这里输出
    return longest_word;
}
intmain()
{
    char s;
    printf("Enter a String,please:\n");
    input(s);
    char* longest_word=findmax(s);
    printf("The longest word is:%s 输出没有释放掉的longest_word\n",longest_word);
    printf("The longest word is:%s输出s\n",s);
      return 0;

}

工科男 发表于 2016-7-29 20:07:44

小剑剑 发表于 2016-7-28 18:58
楼上正解,我一开始没细看没注意
第一你可以在findmax函数中就输出
第二你可以把最长的字符串复制到s ...

谢谢你的帮助哦,嘿嘿,{:5_106:},膜拜一下牛牛
页: [1]
查看完整版本: 一句话中输出的最长单词