统计英文文件中单词数和各单词出现的频率(次数)

/*
File name:词频统计.cpp
Author:杨柳
Date:2017.3.25
IDE:DEV-c++ 
*/
#include 
#include 
#include 
#define MAX_NUM 100000
struct Word      //单词结构体
{
int  num;//单词频数
char ch[20];//每一个单词
} word[MAX_NUM];
int select=1;//select 为是否退出系统的标记
 
//向用户提供帮助说明
void help()
{
    printf("\n(1)可导入任意英文文本文件");
	printf("\n(2)统计该英文文件中单词数和各单词出现的频率(次数),并能将单词按字典顺序输出");
	printf("\n(3)将单词及频率写入文件");
}

//获取英文文本信息及总单词数
void  readfile(char essay[],int total_num,char ch)

{
   FILE *fp;
   int i=1;
   fp=fopen("data.txt","r");
   if(!fp)
   {
	   printf("\n打开文件data.txt失败!");
	   exit(0);
   }
   ch=fgetc(fp);//ch为文章第一个字符,判断文章文件是否为空。
   if(ch!=EOF)
   {
     essay[0]=ch;
     for(i;!feof(fp);i++) //如果未遇到读入文本结束符
	 {
          essay[i]=fgetc(fp);//获取文章,将文章中的各个字符放到essay数组中
	 }
     essay[i]='\0';//在读取文章时,并没有将字符串的结束标志读进去,为了后面使用strtok等字符串的相关函数,加上’\0’。
     total_num=i;//记录单词的数量
   }
     if(0==i)
	   printf("\n文件为空,请选择英文文本输入!");
     else
	   printf("\n");
   fclose(fp);
 }


/*向文件写入英文文本信息*/
void  writefile(char essay[] ,int total_num, char ch)
{
    char essay_str[MAX_NUM];
    FILE *fp;
    char str=' ';
    getchar();
    int i=0;
    fp=fopen("data.txt","w");
    if(!fp)
    {
	   printf("\n打开文件data.txt失败!");
    }
    printf("请输入:");
    gets(essay_str);
    if(ch!=EOF)
    fputc(str,fp);
    fputs(essay_str,fp);//将新增的文章读到文件上
    strcat(essay,essay_str);
    readfile(essay,total_num,ch);
    printf("添加成功");
    printf("\n");
    fclose(fp);
}
 
//显示英文文本 
void show(char essay[],int total_num,char ch)//显示文章

{
   if(ch==EOF)
          printf("\n文件为空,请选择英文文本输入!");
   else
          printf("%s",essay);
          printf("\n");
}


/*按字典顺序进行单词排序*/
void sort(int k)
{
	int num;
	int i,j,t;  //定义局部变量i,j
	char temp[20];  //临时字符数组
	for(i=0;ii;j--)
			if((strcmp(word[j].ch,word[j+1].ch)==1)) //比较两个单词,若后一个单词大于前一个,进行调换
			{
             strcpy(temp,word[j].ch);//交换单词
             strcpy(word[j].ch,word[j+1].ch);
             strcpy(word[j+1].ch,temp);
             t=word[j].num;//交换单词频数
             word[j].num=word[j+1].num;
             word[j+1].num=t;
			}
	}
} 
 
 
//统计单词频数
void count(char *essay,char *b)
{
  
int j,i=0;//i记录有多少不同的单词,n记录相同单词出现的次数

char *t;

bool judge=false;

int sum=0;

FILE *fp;

    for(t=strtok(essay,b);t!=NULL;t=strtok(NULL,b))

{

//利用strtok函数将文章中的单词分离开。

   sum++;//单词总数

   strcpy(word[i].ch,t);

   (word[i].num)=1;


   for(j=0;j

 

你可能感兴趣的:(算法编程)