遇到一个分析文章的程序,首先要解决的是文件的读入问题,保障程序能成功的读取文件,这里我选择了让程序能够读取TXT格式的文件。
当文件读取完毕,需要让程序能够区分单词与标点符号,需要将单词从文章中分离出来,并对单词进行分析。
分析单词之后就需要能正确的统计出所有单词的出现次数,并对其比较排序。
最后是需要程序能够成功的输出10个高频词汇
#include
"stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
struct
word
{
char str[20];
int number;
float frequency;
}W[1000];
int sum;
double all=0;
void Deal(char s[])
{
int i,j;
int t;
int flag=0;
for(i=0;i<=sum;i++)
{
if(strcmp(W[i].str,s)==0)
{
W[i].number++;
flag=1;
}
}
if(flag==0)
{
for(j=0;j<20;j++)
W[sum].str[j]=s[j];
W[sum].number++;
sum++;
}
}
void Read()
{
int i,j;
char ch,s[20];
FILE*fp;
if((fp=fopen("zzz.txt","r"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
for(i=0;i<999;i++)
W[i].number=0;
sum=0;
ch=NULL;
while(ch!=-1)
{
for(i=0;i<20;i++)
s[i]=‘\0‘;
ch=fgetc(fp);
if(isalpha(ch)!=0)
{
for(i=0;;i++)
{
s[i]=ch;
ch=fgetc(fp);
if(isalpha(ch)!=0)continue;
else
{break;}
}
for(i=0;i<20;i++)
{
if(s[i]>=65 &&
s[i]<=90)
s[i]=s[i]+32;
}
Deal(s);
}
else
{continue;}
}
}
void jisuan()
{
for(int
i=0;i<1000;i++)
{
W[i].frequency=W[i].number/all;
if(W[i].number>0)all=all+W[i].number;
}
finish=(double)clock();
printf("计算时间:%.4fms\n",(finish-start));
}
void paixu()
{
double start,finish;
start=(double)clock();
word t;
for(int j=0;j<999;j++)
for(int
i=0;i<999-j;i++)
if(W[i].number<W[i+1].number)
{
t=W[i];W[i]=W[i+1];W[i+1]=t;
}
}
int main(int argc, char* argv[])
{
int i;
double start,finish;
start=(double)clock();
Read();
jisuan();
paixu();
for(i=0;i<10;i++)
printf("%-8s
%8d\n",W[i].str,W[i].number) ;
printf("总单词数: %.0lf\n",all);
return 0;
}
分析一个英文文章,并找出10个高频词汇打印出来,布布扣,bubuko.com
原文:http://www.cnblogs.com/hujiaqi/p/3577669.html