`
kmplayer
  • 浏览: 497874 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

统计文件中单词的个数

阅读更多
1,统计单词的个数
(1)利用c++中的map容器.
#include <iostream>
#include <map>
using namespace std ;

int main ()
{
    freopen("genetic.txt","r",stdin);
    string word;
    map<string,int> M;
    while(cin>>word)
        M[word]++;
    map<string,int>::iterator ite;
    for(ite=M.begin();ite!=M.end();ite++)
        cout<<ite->first<<" "<<ite->second<<endl;
	return 0 ;
}

(2)利用散列表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WORDLENGTH 30
#define NHASH 300

typedef struct node* nodeptr;
typedef struct node
{
    char* word;
    int cnt;
    nodeptr next;
} node;

int hash(char* buf)
{
    unsigned n=0;
    char* p;
    for(p=buf;*p;p++)
        n=31*n+(*p);
    return n%NHASH;
}

nodeptr hashTable[NHASH];

//链表法,解决hash的冲突.
void incword(char* buf)
{
    int n=hash(buf);
    nodeptr p;
    for(p=hashTable[n];p;p=p->next)
    {
        if(strcmp(p->word,buf)==0)
        {
            p->cnt++;
            return;
        }
    }
    p=(nodeptr)malloc(sizeof(node));
    p->word=(char*)malloc(strlen(buf)+1);
    strcpy(p->word,buf);
    p->cnt=1;
    p->next=hashTable[n];
    hashTable[n]=p;
}

int main ()
{
    freopen("genetic.txt","r",stdin);
    char buf[WORDLENGTH];
    int i;
    while( scanf("%s",buf)!=EOF )
        incword(buf);
    for(i=0;i<NHASH;i++)
    {
        nodeptr p=hashTable[i];
        for(;p;p=p->next)
            printf("%s %d\n",p->word,p->cnt);
    }
	return 0 ;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics