统计txt文件中英文文章的单词频率(常规思维,VC6.0)

按照常规思路我是这样做的,首先把英文文章中的每个字母包括空格,标点符号存入一个数组中,然后根据标点符号或者空格来判断单词,两个空格之间就会有一个单词,然后将这个单词存入数组,然后使用strcmp函数进行比较,在这里数组与数组之间的比较,若为真返回1,否则返回-1,这里显然我要用结构体,统计的时候我首先将每个带错的属性初始化为1,strcmp为真则变为0,亿这样的方式来统计单词,最后结果放入另外一个文本。

/*
软件工程1501班
陈辉
1508010131
*/

#include<stdio.h>
#include<stdlib.h>
#include<String>

struct Eng
{
 char eng[20];       //一个单词最多20个字母
 int  Flag;          //统计每一个单词的字母个数
 int fre;            //若fre的值为0,则表示该单词已经被统计过
 int count;          //统计单词的频率
};

int main(void)
{
 Eng ec[10000];                    //存放1000个英文单词
    FILE* fp,*ep;
 fp=fopen("eng.txt","r");         //英语文本
 ep=fopen("frequency.txt","a");   //统计结果

    int i=0;
 int e1,e2,e3;              
 e1=0;
 e3=0;
 int p=0;//e1初始位置
 char a[200000];
 while(!feof(fp))
 {
 
  fscanf(fp,"%c",&a[i]);   // 将字母和空格放在数组
  i++;
  
 }
    for(int j=1;j<i-1;j++)
 {
 
  if(' '==a[j])
  {
   e2=j;
   
   for(int k=e1+1;k<e2;k++) //a[]={' ','1',' ','d','e',' ','c'}
   {
    ec[p].eng[e3++]=a[k];
    ec[p].Flag=e2-e1-1;
   }                              //第p个单词
    p++;
   e3=0;
   e1=e2;
  }
 }
 //此时文本中的单词已经全部保存在ec[p]数组
 for(int c=0;c<p;c++)
 {
  ec[c].fre=1;
  ec[c].count=0;
 }
 
 for(int x=0;x<p;x++)
  for(int d=x+1;d<p;d++)
  {  
   if(ec[d].fre)   //如果fre为0   说明已经该单词原先已经统计过了
   if(!strcmp(ec[x].eng,ec[d].eng))
   {
     ec[d].fre=0;
     ec[x].count++;
   }
  }
  fprintf(ep,"总共有%d个单词\n",p);
  for(int d=0;d<p;d++)
  {
   if(ec[d].fre)       //当fre为1时,输出的单词不会重复
   {
        for(int x=0;x<ec[d].Flag;x++)
       fprintf(ep,"%c",ec[d].eng[x]);
        fprintf(ep,"   %d\n",ec[d].count+1);   //存储在文本中
   }
  } 
  printf("你好\n“eng.txt”中保存的英文文章单词频率的统计结果\n保存在“frequency.txt”中请注意查看\n");
  return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值