鱼C论坛

 找回密码
 立即注册
查看: 2501|回复: 7

一句话中输出的最长单词

[复制链接]
发表于 2016-7-27 07:20:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

如题,输出一句话中的最长单词,在网上看了一段代码,刚好就是指针函数的调用,目前学到这一块,就拿来调试一下,我能看到的,可以改到的地方都改了,但是结果却不对,我也搞不懂问题出在哪里了。请帮忙看一下。
  1. #include<stdio.h>
  2. void input(char s[])
  3. {  
  4.         int k=0;
  5.         int c;
  6.     for(;(c=getchar())!='\n';k++)
  7.         {  
  8.         s[k]=c;  
  9.     }  
  10.     s[k]='\0';                                     //读取完成,记得对这个字符数组封口  
  11. }  
  12. char* findmax(char s[])
  13. {  
  14.    int max=0,word_length=0,p=0,k=0;                //这个p是用来记录最长单词的位置  
  15.    
  16.    char longest_word[255];
  17.    for(k=0;s[k]!='\0';k++)
  18.         {  
  19.         if(s[k]==' ')
  20.                 {                                          //扫到空格,则结算是否为最长的单词  
  21.            if(max<word_length)
  22.                    {  
  23.                max=word_length;  
  24.                 p=k;  
  25.             }  
  26.             word_length=0;  
  27.         }  
  28.         else
  29.                 {                                           //如果i扫到的不是空格,那么开始计算单词的长度  
  30.             word_length++;  
  31.         }  
  32.    }  
  33. if(max<word_length)
  34.         {                                                   //此乃用于最长的单词在结尾的情况  
  35.         max=word_length;  
  36.         p=k;  
  37.         }  
  38.      
  39.     for(p=p-max,k=0;max>0;max--,p++,k++)
  40.         {  
  41.         longest_word[k]=s[p];  
  42.     }  
  43.     longest_word[k]='\0';  
  44.     return longest_word;  
  45. }  
  46. int  main()
  47. {  
  48.     char s[255];
  49.         char* longest_word=findmax(s);
  50.     printf("Enter a String,please:\n");  
  51.     input(s);     
  52.      
  53.     printf("The longest word is:%s\n",longest_word);
  54.         return 0;
  55. }  
复制代码

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

无标题.png
无标题1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-27 15:14:45 | 显示全部楼层
本帖最后由 小剑剑 于 2016-7-27 15:16 编辑

21行到26行好像word_length的位置放错了,只能帮你到这了
  1. if(max<word_length)

  2.                   {  
  3.           max=word_length;  

  4.             p=k;  
  5. word_length=0;
  6.        }  


复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-27 16:46:58 | 显示全部楼层
小剑剑 发表于 2016-7-27 15:14
21行到26行好像word_length的位置放错了,只能帮你到这了

谢谢你的热心哦,只是试了一下,没有任何结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-27 17:37:45 | 显示全部楼层
不错不错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-27 18:14:47 | 显示全部楼层
char longest_word[255];这句是在findmax()内声明的,你return longest_word意思是返回了一个地址,但函数结束后,局部变量longest_word[255]内存里的字符串已经释放,无法引用,你犯了一个C语言的大忌。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-27 22:18:13 | 显示全部楼层
ljd884497 发表于 2016-7-27 18:14
char longest_word[255];这句是在findmax()内声明的,你return longest_word意思是返回了一个地址,但函 ...

那该如何修改??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-28 18:58:40 | 显示全部楼层
本帖最后由 小剑剑 于 2016-7-28 19:04 编辑
工科男 发表于 2016-7-27 22:18
那该如何修改??


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



这是我稍微修改了一下的代码,试了两次正确,试试能不能自己按上面思路改回来,在对比一下
  1. #include<stdio.h>
  2. #include <string.h>         //strcpy函数在这
  3. void input(char s[])
  4. {
  5.         int k=0;
  6.         int c;
  7.     for(;(c=getchar())!='\n';k++)
  8.         {
  9.         s[k]=c;
  10.     }
  11.     s[k]='\0';                                     //读取完成,记得对这个字符数组封口
  12. }
  13. char* findmax(char s[])
  14. {
  15.    int max=0,word_length=0,p=0,k=0;                //这个p是用来记录最长单词的位置
  16.     char *longest_word=malloc(255);              //malloc函数
  17.    for(k=0;s[k]!='\0';k++)
  18.         {
  19.         if(s[k]==' ')
  20.                 {                                          //扫到空格,则结算是否为最长的单词
  21.            if(max<word_length)
  22.                    {
  23.                max=word_length;
  24.                 p=k;
  25.                 word_length=0;                             //这里我放了进来
  26.             }
  27.         }
  28.         else
  29.                 {                                           //如果i扫到的不是空格,那么开始计算单词的长度
  30.             word_length++;
  31.         }
  32.    }
  33. if(max<word_length)
  34.         {                                                   //此乃用于最长的单词在结尾的情况
  35.         max=word_length;
  36.         p=k;
  37.         }

  38.     for(p=p-max,k=0;max>0;max--,p++,k++)
  39.         {
  40.         longest_word[k]=s[p];
  41.     }
  42.     longest_word[k]='\0';
  43.     strcpy(s,longest_word);
  44.     printf("The longest word is:%s  在findmax中输出\n",longest_word);    //可以这里输出
  45.     return longest_word;
  46. }
  47. int  main()
  48. {
  49.     char s[255];
  50.     printf("Enter a String,please:\n");
  51.     input(s);
  52.     char* longest_word=findmax(s);
  53.     printf("The longest word is:%s 输出没有释放掉的longest_word\n",longest_word);
  54.     printf("The longest word is:%s  输出s\n",s);
  55.         return 0;

  56. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

谢谢你的帮助哦,嘿嘿,,膜拜一下牛牛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-14 15:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表