| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 433 人关注过本帖
标题:求最大输入的字符串,高手进
只看楼主 加入收藏
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
结帖率:73.96%
收藏
已结贴  问题点数:20 回复次数:5 
求最大输入的字符串,高手进
这个程序是输出第一个最长的单词,编译能通过,结果也没问题,现在要输出全部最长的单词
程序代码:
#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 11:11
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:8 
我觉得这段程序有点问题,他的意思大概把前面最长的单词输出后,对后面的字符串继续判断,也输出最长的,但是少了一个判断,就是后面的字符串比前面的短是也会输出。例如 qqqq www ee r.输出的是 qqqq www ee r
2011-08-30 11:22
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:12 
程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    char buf[BUFSIZ];
    size_t i, start = 0, len, maxlen = 0;

    printf("请输入一个字符串,我将找出长度最长的单词:\n");\
    fgets(buf, BUFSIZ, stdin);

    len = strlen(buf);
    buf[len - 1] = ' '; /*将回车符换成空格*/
    /*查询最大单词的值*/
    for( i = 0; i < len; i++ )
    {
        if( buf[i] == ' ' )
        {
            if( (i - start) > maxlen )
            {
                maxlen = i - start;
            }
            start = i + 1; /*记录起始指针*/
        }
    }
    printf("max is :%d\n", maxlen);
    printf("all max word is:");
    start = 0; /*复0*/
    for( i = 0; i < len; i++ )
    {
        if( buf[i] == ' ')
        {
            if( (i - start) == maxlen )
            {
                size_t j;
                /*输出最大的单词*/
                for( j = start; j < maxlen + start; j++ )
                {
                    putc(buf[j], stderr);
                }
                putc(' ', stderr); /*空一格区分每个单词*/
            }
            start = i + 1;
        }
    }

    return 0;
}
高手一般不进,偶低手进,没有字符合法判断,自己加。

[ 本帖最后由 hellovfp 于 2011-8-30 12:49 编辑 ]

我们都在路上。。。。。
2011-08-30 12:35
魔剑c
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2011-8-29
收藏
得分:0 
回复 3楼 hellovfp
请问你们是用哪个软件编的C语言程序,我试了好几个,一直不顺手……
2011-08-30 12:40
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 4楼 魔剑c
不可能,试了这么多还找不到一个?
收费的:ms vc系列。
免费的:codeblocks, codelite, vc2003toolkit,bcc5.5, openWaton, tcc, lcc, 记事本+MinGW..........多得数不完。

我们都在路上。。。。。
2011-08-30 12:45
zhshjia
Rank: 2
等 级:论坛游民
帖 子:16
专家分:19
注 册:2011-8-29
收藏
得分:0 
回复 4楼 魔剑c
TC 2.0 VC 6.0看喜好
2011-08-30 19:37
快速回复:求最大输入的字符串,高手进
数据加载中...
 
   



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

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