| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4593 人关注过本帖
标题:关于输出字符串中最长单词的问题
只看楼主 加入收藏
三多兄
Rank: 2
等 级:论坛游民
帖 子:6
专家分:25
注 册:2016-10-23
收藏
得分:0 
函数返回值应该是 char * 类型
2016-12-21 22:23
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
没有做到进入下一次循环把w[wlan]这个数组清空,再赋值w[wlen] = x[i];时候不能完全覆盖之前的。。

Code is my life.
2016-12-21 22:26
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10565
专家分:43004
注 册:2014-5-20
收藏
得分:2 
#include<stdio.h>
#include<string.h>
char *longestword(char x[], char *lw);
int main()
{
    char a[80], lw[500];
    printf("请输入一行字符:\n");
    gets(a);
    printf("%s",longestword(a, lw));
    return 0;
}

char *longestword(char x[], char *lw)
{
    int i, n, wlen, lwlen;//wlen保存单词的长度,lwlen保存扫描到最长单词的长度。
    char w[80];//w保存扫描到的单词,lw保存扫描到最长的单词。
    n = strlen(x);
    lwlen = wlen = 0;
    for (i = 0; i < n; i++)
    {
        if ((x[i] >= 'A'&&x[i] <= 'Z') || (x[i] >= 'a'&&x[i] <= 'z'))
        {
            w[wlen++] = x[i];
        }
        else
        {
            if (wlen > lwlen)
            {
                w[wlen++] = 0;
                strcpy_s(lw, wlen, w);
                lwlen = --wlen;
            }
            wlen = 0;
        }
    }
    if (wlen > lwlen)
    {
        w[wlen++] = 0;
        strcpy_s(lw, wlen, w);
    }
    return lw;
}
2016-12-21 22:41
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
回复 13楼 吹水佬
学习了!

Code is my life.
2016-12-21 22:49
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:3 
回复 10楼 busboy
昨晚只是粗略看看,没有开电脑上机调试,今早上机调试发现~retrun lw这里,先不说别的,lw是在函数体里面定义,函数结束后就释放了(相当于free了),因此这样return 函数体里面定义的数组是有问题的,return后数组里面的空间可能会被其它数据占用。就像你把房子卖了,钥匙还在,你可以进去,但这样是很可能出问题的(这句经典引用一个关于free的贴子里面的),代码改正完毕,改动较大~

程序代码:
#include<stdio.h>
#include<string.h>
void longestword(char x[],char lw[]);
int main()
{
    char a[80];
    char lw[500]={0};
    printf("请输入一行字符:\n");
    gets(a);
    longestword(a,lw);
    printf("%s\n",lw);
    return 0;
}
void longestword(char x[],char lw[])
{
    int i, n, wlen, lwlen;//wlen保存单词的长度,lwlen保存扫描到最长单词的长度。
    char w[80];//w保存扫描到的单词,lw保存扫描到最长的单词。
    n = strlen(x);
    lwlen = wlen = 0;
    for (i = 0;i < n;i++)
    {
        if ((x[i] >= 'A'&&x[i] <= 'Z') || (x[i] >= 'a'&&x[i] <= 'z'))
        {
            w[wlen] = x[i];
            wlen++;
        }
        else
        {
            if (wlen > lwlen)
            {
                strcpy(lw, w);
                lwlen = wlen;
                lw[wlen]='\0';
            }
             wlen = 0;
        }
    }
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 07:54
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 13楼 吹水佬
看帖后才发现和13楼的改得差不多,就是函数返回值类型不同~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 07:56
神月泽夜
Rank: 1
等 级:新手上路
帖 子:24
专家分:9
注 册:2016-11-29
收藏
得分:0 
回复 5楼 九转星河
好像是噢,等下回去改改看
2016-12-22 10:51
快速回复:关于输出字符串中最长单词的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016466 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved