作业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~

原文地址:https://www.cnblogs.com/yangyangji/p/5284707.html