| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 911 人关注过本帖
标题:统计文本中最长单词的长度
只看楼主 加入收藏
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
结帖率:95.45%
收藏
已结贴  问题点数:20 回复次数:9 
统计文本中最长单词的长度
如何统计文本中最长单词的长度,我想把一系列单词存在二维数组中,然后调用strlen函数计算每个单词长度把这些数据存在另一个数组中,再比较。求解如何将几个单词存入二维数组
搜索更多相关主题的帖子: 单词 统计 如何 
2014-11-18 23:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
单纯要求最长单词的长度,并不需要把每个单词都记录下来,亦即不需要二维数组。

授人以渔,不授人以鱼。
2014-11-19 00:02
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
也需要输出最长的单词,该怎么做,求解

一片落叶掉进了回忆的流年。
2014-11-19 07:46
TinyBoy
Rank: 2
等 级:论坛游民
帖 子:23
专家分:44
注 册:2014-11-13
收藏
得分:2 
回复 2 楼 TonyDeng
你定义一个二维数组,把要计算的单词放进去,然后计算最长的不就行了。
2014-11-19 08:43
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:4 
程序代码:
char *
max_len ( FILE * stream )
{
    char * max_str = NULL, * temp_str ;
    unsigned max_len = 0, temp_len ;
    int i = 0 ;
    if ( stream == NULL ) {
        return NULL ;
    }
    while ( fscanf ( stream, "%s", temp_str ) == 1 ) {
        temp_len = strlen ( temp_str ) ;
        /*
        **判断字符串是否为英文单词
        */
        while ( isalpha ( *(temp_str + i++) ) ) {
            //nothing
        }
        if ( i < temp_len ){
            continue ;
        }
        /*
        **判断单词长度
        */
        if ( max_len < temp_len ){
            max_len = temp_len ;
            max_str = temp_str ;
        }
    }
    return max_str ;
}

没有构造测试数据,所以如有BUG,请谅解。

这段代码有误,下面有人进行了改进……

[ 本帖最后由 yahwei 于 2014-11-21 10:36 编辑 ]

[qq]949654600[/qq]
2014-11-19 09:25
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:2 
比较的时候 只把最长的单词记录下来就行了
2014-11-19 10:57
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
怎么用数组做

一片落叶掉进了回忆的流年。
2014-11-19 11:13
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:2 
回复 7 楼 诸葛欧阳
明明有很好的实现方法,何必非用数组呢
2014-11-19 16:06
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
为什么上面的程序不行,有没有更完整的程序

一片落叶掉进了回忆的流年。
2014-11-20 23:42
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:8 
程序代码:
#include<stdio.h>
#include<string.h>
#define N 30 //假设单词的最大长度为30 ,这里为了方便没有利用动态内存分配 

char *max_len ( FILE * stream )
{
    static char max_str[N];//静态变量,全局有效 (防止函数返回后释放掉该内存区域) 
    char temp_str[N];//局部变量,局部有效 
    unsigned max_len = 0, temp_len ;
    int i = 0 ;
    if ( stream == NULL ) {
        return NULL ;
    }
    while ( fscanf ( stream, "%s", temp_str ) == 1 ) {
        temp_len = strlen ( temp_str ) ;
        /*
        **判断字符串是否为英文单词
        */
        while ( isalpha ( *(temp_str + i++) ) ) {
            //nothing
        }
        if ( i < temp_len ){
            continue ;
        }
        /*
        **判断单词长度
        */
        if ( max_len < temp_len ){
            max_len = temp_len ;
            strcpy(max_str,temp_str) ;
        }
    }
    return max_str ;//返回指向max_str数组的指针值 
}
int main (void)
{
    FILE *fp=NULL; 
    if((fp=fopen("d:\\test.txt","r"))==NULL)//注意,测试时改变你的测试文件的地址 
   {
     printf("open the file is error!\n");
     exit(0);
   }
    printf("最长字符为:%s",max_len(fp));
    close(fp);
    getchar();
    return 0; 
}


[ 本帖最后由 liao06550107 于 2014-11-21 01:19 编辑 ]

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2014-11-21 01:14
快速回复:统计文本中最长单词的长度
数据加载中...
 
   



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

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