做一个词频统计程序,该程序具有以下功能基本要求:(1)可导入任意英文文本文件(2)统计该英文文件中单词数和各单词出现的频率(次数),并能将单词按字典顺序输出。(3)将单词及频率写入文件。提高要求:完成基本要求的基础上,实现下述功能:1.实现GUI界面。2.将单词及频率写入数据库。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
typedef struct node //定义结构体
{
char dan[20];
int sum;
}CC;
char ch[10];//单词的个数查询的次数长度大小
CC p[1000];
char filename[100],temp[10];//文件名和介质
int flag; //是否读取文件的判断
int count=0; //文章总数
int c,f;
char *h[2]={"单词","词频"};
FILE *fp;
printf("需要读取的文件名字或路径,没有文件请输入0;如果有请写1:"); //选择自己的文件或者默认文件
scanf("%d",&flag);
if(flag==1){
printf("请输入文件名:");
scanf("%s",&filename);
if((fp=fopen(filename,"r"))==NULL){
printf("没有文件\n");
getchar();
//Sleep(100);
exit(0);
}
}
else{
if((fp=fopen("in.txt","r"))==NULL){
printf("没有文件\n");
getchar();
Sleep(1000);
exit(0);
}
}
while(fscanf(fp,"%s",ch)==1) //计算单词总数
{
strcpy(p[count].dan,ch);
count++;
printf("%s ",ch);
}
printf("\n");
printf("总共有%d个单词\n",count);
printf("词频显示\n");
for( int i=0;i<count;i++) //词频的计算
{
for(int k=i+1;k<count;k++)
{
if(strcmp(p[i].dan,p[k].dan)==0)
{
for(int d=k;d<count;d++)
{
strcpy(p[d].dan,p[d+1].dan);
}
count--;
p[i].sum++;
}
}
}
for(c=0;c<count;c++){
printf("%s %d\n",p[c].dan,p[c].sum+1);
}
printf("排序完后的单词:\n");
for(int n=0;n<count;n++) //排序
{
for(int m=n+1;m<count;m++){
if(strcmp(p[n].dan,p[m].dan)>0){
strcpy(temp,p[n].dan);
strcpy(p[n].dan,p[m].dan);
strcpy(p[m].dan,temp);
}
}
}
for(f=0;f<count;f++){
printf("%s ",p[f].dan);
}
if((fp=fopen("out.txt","w"))==NULL){
printf("没有文件\n");
exit(0);
}
fprintf(fp,"%s %s\n",h[0],h[1]);
for(int b=0;b<count;b++)
{
fprintf(fp,"%s",p[b].dan);
fprintf(fp,"%8d\n",p[b].sum+1);
}
fclose(fp);
system("pause");
return 0;
}