词频数的统计

做一个词频统计程序,该程序具有以下功能
基本要求:

(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;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值