| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 979 人关注过本帖
标题:输出全部最长单词!高手帮帮忙!多谢啦!
只看楼主 加入收藏
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
结帖率:95.65%
收藏
已结贴  问题点数:20 回复次数:15 
输出全部最长单词!高手帮帮忙!多谢啦!
这个程序是输出第一个最长的单词,编译能通过,结果也没问题,现在要输出全部最长的单词,需要用到指针数组和指针的指针,这个对我这个初学者来说实在是有点难了,大神这个程序的基础上帮忙修改下!多谢啦!
#include
char *fun(char *p);
int alphabet(char c);
main()
{


    char str[100];
    char *s;
    printf("input the string:\n");
    gets(str);
    s=fun(str);
    if(s==NULL)
        printf("the string is null!");
    else
    {
        printf("the longest word is :\n");
        while(alphabet(*s))
        {
        printf("%c",*s);
            s++;
        }
        printf("\n");
    }
}

int alphabet(char c)

{
    if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
        return 1;
    else
        return 0;
}

char *fun(char *p)
{
    int max=0;
    int count=0;
    int flag=1;
    char *point=NULL;
    while(*p!='\0')
    {
        if(alphabet(*p))
        {
            count++;
            flag=0;
        }
        else
            flag=1;
        if(flag)
        {
            if(count>max)
            {
                max=count;
                point=p-max;
                count=0;
            }
            else
                count=0;
        }
        p++;
    }
    return point;
}
搜索更多相关主题的帖子: 单词 null 
2011-08-29 21:42
呵呵呵。。
Rank: 2
等 级:论坛游民
帖 子:43
专家分:52
注 册:2010-6-11
收藏
得分:0 
一句话中最长的单词不就是只有一个吗,哪来的全部,要是有全部那还能说是最长的吗,
2011-08-29 22:47
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:5 
楼主的程序有很明显的错误,我不知道为什么编译没错,结果也没问题,除非楼主copy程序失误了。
就楼主copy出来的程序说,所限#include后面没有库文件,暂且认为是楼主copy失误,在看函数fun,
1:return point,指针point是一个局部指针变量,在函数fun执行时所付给point的地址是一个临时
地址,也就是这个地址会在函数调用结束后被编译器自动注销掉,当在main函数里用这个返回值时是
会出错的,记住,返回一个局部指针变量的值,其实就是值传递,因为指针就是地址,地址就是一个值!
2:看看楼主的程序,函数fun中的退出条件是当p所知的字符为'\0'时,楼主忽略了一点,当最长的字符
恰好最后一个字符串时,楼主的程序是得不到正确答案的,因为,当遇到'\0'字符时查找最长字符串的
工作就退出了,即没有对最后一个字符串的长度做出判断,所输出的是除了最后一个字符串之外最长的
字符串。
不知道楼主是否明白了我的意思,程序我已经修改好了,我希望楼主能根据我说的两个问题修改下程序,
有什么不明白的可以继续再问。对于楼主想用到指针数组和指针的指针,这个想法很好,但是我觉得,使用
指针的初衷是为了简化程序和提高执行效率,从这个程序的实现目的看,使用指针数组甚至是指针的指针
违背了我们使用它们的初衷。
以上为个人观点,

天道酬勤!
2011-08-29 22:51
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:0 
回复 2楼 呵呵呵。。
可以一样长嘛!qqqq wwww ee fgt
这样就输出 qqqq wwww
2011-08-29 22:59
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:5 
基本没改,打了些补丁,有一个bug修正了一下
结果试了几次应该是行的

#include <stdio.h>
#include <string.h>
char *fun(char *p);
int alphabet(char c);
char *a[10];
main()
{


    char str[100];
    char *s;
    int c;
    printf("input the string:\n");
    gets(str);
    s=fun(str);
    if(s==NULL)
        printf("the string is null!");
    else
    {
        printf("the longest word is :\n");
        while(*s != '\0')
        {
            while(alphabet(*s))
            {
   
                printf("%c",*s);
                s++;
            }
            c = strlen(str)-strlen(s);
            printf("  ");
            if(*s != '\0')
            {
                s++;
                s=fun(s);
            }
            if(strlen(s) < c)
                break;
        }
        printf("\n");
    }
}

int alphabet(char c)

{
    if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
        return 1;
    else
        return 0;
}

char *fun(char *p)
{
    int max=0;
    int count=0;
    int flag=1;
    char *point=NULL;
    while(*p!='\0')
    {
        if(alphabet(*p))
        {
            count++;
            flag=0;
        }
        else
            flag=1;
        if(flag)
        {
            if(count>max)
            {
                max=count;
                point=p-max;
                count=0;
            }
            else
                count=0;
        }
        p++;
    }
    if(count > max)
        point = p - count;
    return point;
}
2011-08-30 00:28
leech58
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:18
专家分:58
注 册:2011-8-29
收藏
得分:0 
楼上程序可以运行出结果。

诚心交流!
2011-08-30 00:37
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
sorry,看了一下,放的是草稿,有bug
这个是好的,可以接受字符间有多个空格

#include <stdio.h>
#include <string.h>
char *fun(char *p);
int alphabet(char c);
char *a[10];
main()
{


    char str[100];
    char *s,*k;
    int c;
    printf("input the string:\n");
    gets(str);
    s=fun(str);
    if(s==NULL)
        printf("the string is null!");
    else
    {
        printf("the longest word is :\n");
        while(*s != '\0')
        {
            k=s;
            while(alphabet(*s))
            {
   
                printf("%c",*s);
                s++;
            }
            c = strlen(k)-strlen(s);
            printf("  ");
            if(*s != '\0')
            {
                s++;
                s=fun(s);
            }
            if(strlen(s) < c)
                break;
        }
        printf("\n");
    }
}

int alphabet(char c)

{
    if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
        return 1;
    else
        return 0;
}

char *fun(char *p)
{
    int max=0;
    int count=0;
    int flag=1;
    char *point=NULL;
    while(*p!='\0')
    {
        if(alphabet(*p))
        {
            count++;
            flag=0;
        }
        else
            flag=1;
        if(flag)
        {
            if(count>max)
            {
                max=count;
                point=p-max;
                count=0;
            }
            else
                count=0;
        }
        p++;
    }
    if(count > max)
        point = p - count;
    return point;
}
2011-08-30 00:38
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:0 
回复 3楼 luyi_footman
  多谢你给的意见。
  最长的单词出现在最后面也是可以输出的,因为一句话是以标点结束的。这样就可以输出了。
  至于为什么用数组指针是这样的,当有几个单词都是最长的时候,就必须把地址都存进数组了,这样逼于无奈就想到指针的指针了,不用的话,我真不知道沿着我现在的思路怎么输出多个等长的单词。
2011-08-30 09:31
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:0 
回复 7楼 obstratiker
多谢你给的代码,虽然没用到指针数组,但是上实现了等长输出。
这个也有个小bug,要是一句话以标点结尾,程序就会出错,提示应用程序出错。
2011-08-30 09:40
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:0 
回复 7楼 obstratiker
这个逻辑上程序也不对,如果是字符串是wqqq qqq qq q.
输出的是 wqqq qqq qq q 少了一个判断,但是可以沿着这个思路改下。
2011-08-30 10:36
快速回复:输出全部最长单词!高手帮帮忙!多谢啦!
数据加载中...
 
   



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

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