一句话中输出的最长单词
本帖最后由 工科男 于 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:16 编辑
21行到26行好像word_length的位置放错了,只能帮你到这了{:10_277:}
if(max<word_length)
{
max=word_length;
p=k;
word_length=0;
}
小剑剑 发表于 2016-7-27 15:14
21行到26行好像word_length的位置放错了,只能帮你到这了
谢谢你的热心哦,只是试了一下,没有任何结果 不错不错 char longest_word;这句是在findmax()内声明的,你return longest_word意思是返回了一个地址,但函数结束后,局部变量longest_word内存里的字符串已经释放,无法引用,你犯了一个C语言的大忌。 ljd884497 发表于 2016-7-27 18:14
char longest_word;这句是在findmax()内声明的,你return longest_word意思是返回了一个地址,但函 ...
那该如何修改?? 本帖最后由 小剑剑 于 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-28 18:58
楼上正解,我一开始没细看没注意
第一你可以在findmax函数中就输出
第二你可以把最长的字符串复制到s ...
谢谢你的帮助哦,嘿嘿,{:5_106:},膜拜一下牛牛
页:
[1]