分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来
2014-03-02 17:55
281 查看
分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来
在刚刚拿到题目的时候首先想到的要点有:
1.从文件读取数据
2.统计出来单词个数,并保存
3.排序,输出
我要用的编程语言是c,对文件的读取我看了一下书,明确了一些语法,使用格式并看了一些网上其他人对本题的实现。
对从文件中得到的数据开始是想用个2维数组表示,文件指针得到一个存到数组里,读取时分三种情况,字母,空格,
其他类型,字母读入,遇到空格算一个,其他类型无操作。
但是接下来,在排序时感到有些麻烦,先要统计次再排序,因此用到了链表,设置单词结构体,有单词名,出现次数,
在单词存储时判断是否出现过,出现过则num加1,接下来只要排序输出就好了。
完整代码如下:
#include<stdio.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#include<ctype.h>
struct word{
char name[30];
int num;
struct word *next;
};//每个单词最大30个字母,存放单词的链表
void readfile(struct word*&head)
{
FILE *fp;
if((fp=fopen("ab.txt","r"))==NULL)//只读方式打开文件
{
printf("无法打开此文件!\n");
exit(0);
}
char ch,temp[30];
struct word *p;
while(!feof(fp)) //读取单词直到文件结束
{
int i=0;
ch=fgetc(fp); //
temp[0]=' ';
while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||temp[0]==' ')
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
{
temp[i]=ch;
i++;
}
ch=fgetc(fp);
if(feof(fp)) break;
}
temp[i]='\0';//下面判断是否为同一个单词
p=head->next;
while(p)
{
if(!_stricmp(temp,p->name))
{
p->num++;break;
}
p=p->next;
}
if(!p&&temp[0]!='\0')//新单词的进入链表,初始化
{
p=new word;
strcpy(p->name,temp);
p->num=1;
p->next=head->next;
head->next=p;
}
}
}
void sort(struct word*&head) //已有单词出现次数,进行排序
{
struct word *q; //单词指针
int a[10],i; //存储十个单词的出现次数初值为0
for(i=0;i<10;i++)
a[i]=0;
printf("出现频率最高的十个单词如下:\n");
for(i=0;i<10;i++)
{
q=head;
while(q!=NULL)
{
if(q->num>a[i])
a[i]=q->num;
else
q=q->next;
}
q=head;
while(q!=NULL)
{
if(a[i]==q->num)
{
q->num=0;
printf("出现频率:%d\t单词:",a[i]);
puts(q->name);
break;
}
else
q=q->next;
}
}
}
void main()
{
struct word *pdj;
pdj=new word;
pdj->next=NULL;
readfile(pdj);
sort(pdj);
}
在编程时总会遇到一些自己认为困难的地方,也许我们的解决方案不够好,但是一个个问题的解决就是我们的成长
在刚刚拿到题目的时候首先想到的要点有:
1.从文件读取数据
2.统计出来单词个数,并保存
3.排序,输出
我要用的编程语言是c,对文件的读取我看了一下书,明确了一些语法,使用格式并看了一些网上其他人对本题的实现。
对从文件中得到的数据开始是想用个2维数组表示,文件指针得到一个存到数组里,读取时分三种情况,字母,空格,
其他类型,字母读入,遇到空格算一个,其他类型无操作。
但是接下来,在排序时感到有些麻烦,先要统计次再排序,因此用到了链表,设置单词结构体,有单词名,出现次数,
在单词存储时判断是否出现过,出现过则num加1,接下来只要排序输出就好了。
完整代码如下:
#include<stdio.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#include<ctype.h>
struct word{
char name[30];
int num;
struct word *next;
};//每个单词最大30个字母,存放单词的链表
void readfile(struct word*&head)
{
FILE *fp;
if((fp=fopen("ab.txt","r"))==NULL)//只读方式打开文件
{
printf("无法打开此文件!\n");
exit(0);
}
char ch,temp[30];
struct word *p;
while(!feof(fp)) //读取单词直到文件结束
{
int i=0;
ch=fgetc(fp); //
temp[0]=' ';
while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||temp[0]==' ')
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
{
temp[i]=ch;
i++;
}
ch=fgetc(fp);
if(feof(fp)) break;
}
temp[i]='\0';//下面判断是否为同一个单词
p=head->next;
while(p)
{
if(!_stricmp(temp,p->name))
{
p->num++;break;
}
p=p->next;
}
if(!p&&temp[0]!='\0')//新单词的进入链表,初始化
{
p=new word;
strcpy(p->name,temp);
p->num=1;
p->next=head->next;
head->next=p;
}
}
}
void sort(struct word*&head) //已有单词出现次数,进行排序
{
struct word *q; //单词指针
int a[10],i; //存储十个单词的出现次数初值为0
for(i=0;i<10;i++)
a[i]=0;
printf("出现频率最高的十个单词如下:\n");
for(i=0;i<10;i++)
{
q=head;
while(q!=NULL)
{
if(q->num>a[i])
a[i]=q->num;
else
q=q->next;
}
q=head;
while(q!=NULL)
{
if(a[i]==q->num)
{
q->num=0;
printf("出现频率:%d\t单词:",a[i]);
puts(q->name);
break;
}
else
q=q->next;
}
}
}
void main()
{
struct word *pdj;
pdj=new word;
pdj->next=NULL;
readfile(pdj);
sort(pdj);
}
在编程时总会遇到一些自己认为困难的地方,也许我们的解决方案不够好,但是一个个问题的解决就是我们的成长
相关文章推荐
- 软件工程设计:分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来。
- 软件工程个人小程序:分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来
- 写一个程序,分析一个文本文件(英文文章)中各个单词出现的频率,并且把频率最高的10词打印出来
- 编写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并把频率最高的10个词打印出来
- 写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小
- 写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小。
- 编程实现:分析一个文本文件(英文文章)中各个词出现的频率,并把频率最高的前十个词打印出来
- 写一个程序,分析一个文本文件中各个词出现的频率,并把频率最高的10个词打印出来
- 分析一个文本文件中各个单词出现的频率,把频率最高的10个词打印出来
- 写一个程序分析文本文档(英文文章)中各个词出现的频率并把频率最高的10个词打印出来
- 分析一个文本文件中各个单词出现的频率,把频率最高的10个词打印出来
- 分析一个文本文件中各个单词出现的频率,把频率最高的10个词打印出来
- 分析一个文档(英语文章)中各个词出现的频率,并打印频率最高的前10个。
- 分析一个文本文件中各个词出现的频率,并把频率最高的十个单词打印出来。
- 用java程序分析一个文本文件中各个词出现的频率,并把频率最高的十个单词打印出来(一般的冠词,虚词除外)
- 软件工程第一次作业:java实现分析一个文本文件中各个词出现的频率,并输出频率最高的10个词
- 分析一个英文文章,并找出10个高频词汇打印出来
- 分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来
- 一个文本文件统计各个单词出现的频率最高的10个词以及次数
- 统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数