| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1298 人关注过本帖
标题:希望能写出一个用来记录在一个文本中每个单词出现的次数的程序出来,我自己 ...
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
其实我已经想了好几天了,我主要是希望能理解,书上也只要求能读懂,因为以我的能力真的很难做出来,所以我认为得先看得懂再实践,还请版主理解。

I have not failed completely
2012-10-23 20:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你想到什么思路就写出来吧。直接求代码就免了,或者有人肯写的。

授人以渔,不授人以鱼。
2012-10-23 21:00
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
我勒个去....那我只能边学边等了。

I have not failed completely
2012-10-23 22:26
易辉阳
Rank: 2
来 自:湖北武汉
等 级:论坛游民
帖 子:8
专家分:17
注 册:2012-10-13
收藏
得分:6 
先学好指针,早晚都要学的
2012-10-23 22:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
告诉你思路:一次fscanf("%s")就是一个单词,直到文件结束。至于读入单词之后怎么统计和比较,自己去想。指个头针,真当指针是万灵丹药了。

授人以渔,不授人以鱼。
2012-10-23 23:10
jueshidouzi
Rank: 2
等 级:论坛游民
帖 子:12
专家分:32
注 册:2011-10-5
收藏
得分:6 
还是建议先把指针学了。不用方法当然也可以。不过你想想,当你解析一个文本时,这个文本有多少个单词是不知道的。每个单词出现的次数也是不知道的。也就是说,这是动态的。既然是动态的,当然需要用到动态内存了,理所当然就用到指针了。设想不这样的话,如果事先找一块大内存来存放你的记录,万一不够用怎么办?读一个单词,就申请一块内存,把它记录下来,同时计数器加1。然后继续读,读入下一个单词时,从你记录的单词列表里检查这个单词是不是已经出现过,如果出现过,就计数器加1,否则,再申请一块内存,将其记录下来。之所以提倡用2叉树,是为了检查时快一点。假如已经读入了10000个单词,而每个都不一样,当你再读入一个单词时,就要检索这10000个单词,看看是否有记录,现行的检索是很慢的,尤其是数量大时。最好的办法是一边读,同时对记录进行排序。比如hash,二叉树。
2012-10-24 11:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:6 
看看一个指针学坏脑的典型:https://bbs.bccn.net/thread-383961-1-1.html

授人以渔,不授人以鱼。
2012-10-24 16:26
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:6 
没思路的时候先试着说说自己的想法 不能全靠别人罢 祝楼主好运
2012-10-24 17:48
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#define TEXTLEN 10000
#define BUFFERSIZE 100
#define MAXWORDS 500
#define WORDLEN 15

int main(void)
{
    char text[TEXTLEN]={0};
    char buffer[BUFFERSIZE]={0};
    char jieshu[]="*\n";

    const char kongge=' ';
    const char danying='\'';

    char words[MAXWORDS][WORDLEN+1];
    int nword[MAXWORDS];
    char word[WORDLEN+1];
    int wordlen=0;
    int wordcount=0;
    int i;
    int index;
    bool isnew=true;

    printf("这个程序能算出每个单词出现的次数");
    printf("\n请输入文本:\n\n");

    while(true)
    {
        if(!strcmp(fgets(buffer,BUFFERSIZE,stdin),jieshu))
            break;
        if(strlen(text)+strlen(buffer)+1>TEXTLEN)
        {
            printf("这已经是文本容量的最大值了。");
            return 1;
        }
        strcat(text,buffer);
    }
    for(i=0;i<strlen(text);i++)
    {
        if(text[i]==danying||isalnum(text[i]))
            continue;
        text[i]=kongge;
    }
    index=0;
    while(true)
    {
        while(text[index]==kongge)
            index++;
        if(text[index]='\0')
            break;
        wordlen=0;
        while(text[index]==kongge||isalpha(text[index]))
        {
            if(wordlen==WORDLEN)
            {
                printf("这已经是单词长度的最大值了。");
                return 1;
            }
            word[wordlen++]=tolower(text[index++]);
        }
        word[wordlen]='\0';
        
        for(i=0;i<wordcount;i++)               在这里就开始摸不清头脑了
            if(strcmp(word,words[i])==0)         wordcount代表什么?为什么要把它定义为0?
            {                                    输出结果也不对,
                ++nword[i];                      只用解析这下面的一段就行了,谢谢
                isnew=false;
                break;
            }
            isnew=true;
            if(isnew)
            {
                if(wordcount>=MAXWORDS)
                {
                    printf("\n对不起,单词个数已经超过了最大值。\n");
                    printf("(我们不能得到这个结果)\n");
                    return 1;
                }
                strcpy(words[wordcount],word);
                nword[wordcount++]=1;
            }
    }
    for(i=0;i<wordcount;i++)
    {
        if(!(i%3))
            printf("\n");
        printf(" %-15s%5d",words[i],nword[i]);
    }
    return 0;
}

输出不对,求解(我知道写的很乱,所以不用再强调了...)

I have not failed completely
2012-10-26 20:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
认识点英文单词还是需要的,wordcount,即word-count,单词计数。

授人以渔,不授人以鱼。
2012-10-26 20:10
快速回复:希望能写出一个用来记录在一个文本中每个单词出现的次数的程序出来,我 ...
数据加载中...
 
   



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

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