zoukankan      html  css  js  c++  java
  • 软件工程实验——统计单词个数

    设计思路

        读文件里的文章一次只能读一个字符,所以就用一个字符数组(以下用WZ来表示这个数组)来把整篇文章以字符的形式存起来。存单词的同时还得存单词的个数,便想到用结构体数组(用DC来表示)来存储单词和单词个数。结构体包含一个字符数组(用A表示)和一个int型变量(用N表示)分别存放单词和单词个数。要把单词从字符中提出来,想到用非字母的字符来区分。初始化DC,让DC中每一个结构体中的N都等于0。先建立一个字符数组(用B来表示),然后从WZ[0]开始依次判断是否是英文字母,若是英文字母则便依次保存在B数组中,若不是字母字符那么之前的保存在B中的字母组合起来便是一个单词。然后让B依次从DC[0].A开始来比较,若相同则DC[0].N+1,若不相同则继续往后比,若把整个DC全部比完都没有相同的(之前假设DC存到第M个)然后让DC[M+1].A等于B同时DC[M+1].N+1。然后把B清空开始读WZ下一个字符。直到把WZ最后的字符读出来,循环结束。然后用冒泡法以DC[i].N的大小,从大到小给DC排序。然后输出前十个就行了。

    程序代码:

    #include <iostream.h>
    
    #include <stdio.h>
    
    #include <string.h>
    
    typedef struct{
    
    int n;
    
    char da[100];
    
    }danci;
    
    //建文件(题目没要求)
    
    /*void jwj()
    
    {
    
    FILE * in;
    
    char ch,a[10];
    
    cout<<"输入文件名:";
    
    cin>>a;
    
    if((in=fopen(a,"w"))==NULL)
    
    {
    
    cout<<"error!!";
    
    }
    
    cout<<"输入单词,以“#”结束: "<<endl;
    
    ch=getchar();
    
    while(ch!='#')
    
    {
    
    fputc(ch,in);
    
    ch=getchar();
    
    }
    
    fclose(in);
    
    }*/
    
    //读文件
    
    void dwj(char wz[])
    
    {
    
    FILE * out;
    
    int i=0;
    
    char ch,a[10];
    
    cout<<"输入文件名:";
    
    cin>>a;
    
    out=fopen(a,"r");
    
    while(!feof(out))
    
    {
    
    ch=fgetc(out);
    
    wz[i]=ch;
    
    i++;
    
    }
    
    wz[i]='#';
    
    wz[i+1]='';
    
    fclose(out);
    
    }
    
     //单词排序
    
    void dcpx(char wz[])
    
    {
    
    int i,j,t,m,k,l,z;
    
    char c,b[100];
    
    double f,p;
    
    danci dc[9000]; 
    
    for(i=0;i<9000;i++)
    
    {
    
    dc[i].n=0;
    
    for(j=0;j<100;j++)
    
    {
    
    dc[i].da[j]='';
    
    }
    
    }
    
    i=0;j=0;m=0;l=0;t=0;z=0;p=0;
    
    while(wz[i]!='#')
    
    {
    
    c=wz[i];
    
    i++;
    
    if(c>64)
    
    {
    
    if(c<91)
    
    {
    
    m=1;
    
    b[j]=c;
    
    j++;
    
    continue;
    
    }
    
    else
    
    if(c>96)
    
    {
    
    if(c<123)
    
    {
    
    m=1;
    
    b[j]=c;
    
    j++;
    
    continue;
    
    }
    
    }
    
    }
    
    else
    
    if(c==39)
    
    {
    
    m=1;
    
    b[j]=c;
    
    j++;
    
    continue;
    
    }
    
    if(m==0)
    
    continue;
    
    else
    
    {
    
    b[j]='';
    
    p++;
    
    m=0;
    
    j=0;
    
    for(k=0;k<9000;k++)
    
    {
    
    if(strcmp(b,dc[k].da)==0)
    
    {
    
    dc[k].n++;
    
    l=1;
    
    break;
    
    }
    
    }
    
    if(l==0)
    
    {
    
    z=0;
    
    while(b[z]!='')
    
    {
    
    dc[t].da[z]=b[z];
    
    z++;
    
    }
    
    dc[t].n++;
    
    t++;
    
    }
    
    l=0;
    
    }
    
    }
    
    danci dd;
    
    for(i=0;i<8999;i++)
    
    {
    
    for(j=0;j<8999-i;j++)
    
    {
    
    if(dc[j].n<dc[j+1].n)
    
    {
    
    dd=dc[j];
    
    dc[j]=dc[j+1];
    
    dc[j+1]=dd;
    
    }
    
    }
    
    }
    
    i=0;
    
    cout<<"排名"<<'	'<<"单词"<<'	'<<"个数"<<'	'<<"频率"<<endl;
    
    for(i=0;i<10;i++)
    
    {
    
    if(dc[i].n==0)
    
    break;
    
    f=dc[i].n/p;
    
    cout<<i+1<<'	'<<dc[i].da<<'	'<<dc[i].n<<'	'<<f<<endl;
    
    }
    
    cout<<"单次总数为"<<p<<""<<endl;
    
    cout<<"一共有"<<t<<"个不同单词"<<endl;
    
    }
    
    char wz[100000000];
    
    int main()
    
    {
    
    dwj(wz);
    
    dcpx(wz);
    
    return 0;
    
    }

     

     

     

  • 相关阅读:
    <阿里工程师的自我素养>读后感-技术人应该具备的一些基本素质
    Hbase的基本原理(与HIVE的区别、数据结构模型、拓扑结构、水平分区原理、场景)
    大数据技术体系 && NoSQL数据库的基本原理
    软件测试面试经验
    APP非功能测试
    手机APP测试(测试点、测试流程、功能测试)
    性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)
    HTML 实战生成一张页面
    前端性能测试(H5性能测试)
    JAVA基础——设计模式之观察者模式
  • 原文地址:https://www.cnblogs.com/huangguan/p/3577411.html
Copyright © 2011-2022 走看看