• 作业3:个人项目-词频统计


    要求

    (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 附加要求:读入一段文本文件,统计该文本文件中单词的频率。

    (2). 性能分析:

    • 对C++代码运行VS的性能分析工具,找出性能问题并进行优化。
    • 对Java程序运行性能分析工具NetBeans IDE 6.0,找出性能问题并进行优化。

    功能模块分析

    1.结构体

    ①初始化出现次数;

    ②指针

    2.大写转小写(预估用时10min,实际用时≤10min)

    3.判断是否为单词(预估用时30min,实际用时30min)

    ①字符数≥4;

    ②字母开头;

    ③不存在非字母数字

    4.重复出现计数(预估用时30min,实际用时45min)

    5.分割字符串(预估用时30min,实际用时≥50min)

    源代码

    #include<iostream>
    #include<fstream>
    #include<cstring>
    using namespace std;
    
    struct Str{      //定义结构体
        int count;
        char *p;
    };
    
    Str test[100];
    
    void lwr(char x[])     //大写转小写
    {   int k = 0;
        while (x[k] != '')
        {
            if (x[k] >= 'A'&&x[k] <= 'Z')
                x[k] = x[k] + 32;
            k++;
        }
    }
    
    int identify(char a[])    //判断是否符合单词的定义
    {   int m=(strlen(a)>=4)?1:0;
        int n=(a[0]>='a'&&a[0]<='z')?1:0;
        if(!m||!n)
            return 0;
        else
            while(a)
            {   for(int i=1;;i++)
               {  
                   if(!(a[i]>='a'&&a[i]<='z')||!(a[i]>='0'&&a[i]<='9'))
                            return 0;
                   else
                            return 1;
               }
            }
    }
    
    
    
    int counting(char b[],int num)    //对出现次数计数
    {   for(int j=0;j<num;j++)
        {

    if(!strcmp(b,test[j].p)) test[j].count++; else return 0;
    } }
    int main() { char c[200]; ifstream fin("D:/data.txt"); //从文档中获取字符串 for(int f=0;;f++) fin>>c[f]; fin.close(); cin.get(); lwr(c); const char *delim = ",”“.''!?"; //分割字符串 char *q; int n=0; q = strtok(c, delim); while (q) { if (identify(q)) { strcpy(test[n].p,q); n++; } cout << test[n].p << ":" << test[n].count << ' '; q=strtok(NULL,delim); } return 0; }

    输入

    Word is case insensitive, i.e. “file”, “FILE” and “File” are considered the same word.

     

    输出

    统计结果正确

     Github:https://github.com/yangyangji/count/blob/master/count.cpp

    小结


    面对一个程序任务,先不急于编写代码,分析该程序需要几个模块,每个模块的功能,有条理后进行编程,思路清晰。

    此次编程最大的收获是学习了分割字符串的strtok函数。一开始还因为不知道怎么把字符串分割成几个单词而苦恼,后来在网上查阅了各种资料,看来实例后掌握strtok函数的用法。

    源程序优点:

    分几个模块,定义函数实现功能,条理清晰。

    缺点:

    有些部分还有调整简化的空间,对分割字符串掌握还不够熟练。

    总的来说,路还很长,day day up~

  • 相关阅读:
    开源搜索引擎Solr的快速搭建及集成到企业门户最佳实施方案--转载
    Java开发WebService的几种方法--转载
    HBase Java简单示例--转载
    Eclipse快捷键大全--转载
    Java中List、Set和Map的区别--转载
    ArrayList和Iterator的用法
    日期格式化
    java中的值传递和引用传递问题
    Servlet,过滤器,监听器,拦截器的区别
    Java过滤器与SpringMVC拦截器之间的关系与区别
  • 原文地址:https://www.cnblogs.com/yangyangji/p/5284707.html
Copyright © 2020-2023  润新知