做一个词频统计程序,该程序具有以下功能
基本要求:
(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("请输入 路径或文件(例如in.txt):");
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;
}