首页 > 其他 > 详细

统计单词出现的频率及排序

时间:2014-03-03 16:58:27      阅读:219      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <fstream>
#include <string>
#include<stdlib.h>
using namespace std;
 
FILE *fp;    //读文件
char filename[20];      //文件路径及文件名
int m=0;
char c[20];
struct wordcount                  //存放单词及其个数
    {
        int key;
        char a[20];
         
    };
struct wordcount list[300];
 
void readfile(char filename[])   //读文件
{
     
    char ch;
    int flag=0;
    int k,n=0,j=0;
    for(m=0;m<200;m++)                  //将list全部初始化为0
    list[m].key=0;
    if((fp=fopen(filename,"rt"))==NULL)
         printf("cannot open the file!"); 
    else
    while(!feof(fp))
    {   for(k=0;k<20;k++)
            c[k]=‘\0‘;
        int i=0;
        ch=fgetc(fp);
        while(((ch>‘A‘&&ch<‘Z‘)||(ch>‘a‘&&ch<‘z‘))&&!feof(fp))
        {
            if(ch>‘A‘&&ch<‘Z‘) ch=ch+32;
            c[i]=ch;
            ch=fgetc(fp);
            i++;
         }
        c[i]=‘\0‘;
        for(j=0;list[j].key!=0;j++)           
        {
            if(strcmp(list[j].a,c)==0)
            {
                list[j].key=list[j].key+1;
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
            list[j].key=1;
            strcpy(list[j].a,c);
        }  
        flag=0;
    }
}
 
void sort()          //排序
{
    int i,j,max;
    int n=100;            
    char ch2[20];
    for(i=0;i<10;i++)
    {
        max=list[i].key;
        for(j=i+1;j<n;j++)
            if(list[j].key>max)
            {
                max=list[j].key;
                list[j].key=list[i].key;
                list[i].key=max;
                strcpy(ch2,list[j].a);
                strcpy(list[j].a,list[i].a);
                strcpy(list[i].a,ch2);
            }
            cout<<list[i].a<<‘\t‘<<list[i].key<<‘\t‘<<endl;
    }
}
 
void main()
{
    int i;
    cout<<"请输入文件路径及文件名 :";
    scanf("%s",filename);
    readfile(filename);
    cout<<"频率最高的前十个词是:"<<endl;
    sort();
}

 

本程序总共分为三部分读文件readfile()、单词统计、排序找出频率最高的前十个单词;

一、在统计单词频率的程序中,首先第一步是读文件,

if((fp=fopen(filename,"rt"))==NULL)
   printf("cannot open the file!"); 
 else
 while(!feof(fp)){}

这几行代码是读文件,其中要注意的是定义fp,FILE *fp,不要忘记*;

二、单词统计部分是重要部分之一,本程序利用结构体、链表来记录单词及单词的个数

while(((ch>‘A‘&&ch<‘Z‘)||(ch>‘a‘&&ch<‘z‘))&&!feof(fp))
  {
   if(ch>‘A‘&&ch<‘Z‘) ch=ch+32;
    c[i]=ch;
   ch=fgetc(fp);
   i++;
   }
  c[i]=‘\0‘;利用ch=ch+32将大写转换成小写,实现单词的识别,

 

for(j=0;list[j].key!=0;j++)           
  {
   if(strcmp(list[j].a,c)==0)
   {
    list[j].key=list[j].key+1;
    flag=1;
       break;
   }
  }

当遇到空格一个单词结束,进行单词之间的比较,个数累加

 for(i=0;i<10;i++)
 {
  max=list[i].key;
  for(j=i+1;j<n;j++)
   if(list[j].key>max)
   {
    max=list[j].key;
       list[j].key=list[i].key;
    list[i].key=max;
                strcpy(ch2,list[j].a);
    strcpy(list[j].a,list[i].a);
    strcpy(list[i].a,ch2);
   }
   cout<<list[i].a<<‘\t‘<<list[i].key<<‘\t‘<<endl;
 }

将第一个看做单词数最多的,和其他单词比较,最后把数量最多的单词换在第一位输出,依次类推输出出现频率最多的前十个单词;

bubuko.com,布布扣

统计单词出现的频率及排序,布布扣,bubuko.com

统计单词出现的频率及排序

原文:http://www.cnblogs.com/guolili/p/3577336.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!