个人项目——词频统计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个人项目——词频统计相关的知识,希望对你有一定的参考价值。
前言:
开发工具:Visual Studio 2013
开发语言:C++
源代码管理工具:Github
Github源代码网址:https://github.com/superyy/YY1/blob/master/%E8%AF%8D%E9%A2%91%E7%BB%9F%E8%AE%A1main.cpp
预计各功能所花时间:some hours
实际各功能所花时间:some hours
性能提高所花时间:some hours
要求 :实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 附加要求:读入一段文本文件,统计该文本文件中单词的频率。
思路:从文档里把一句语句读入第一次循环检查首字母是否符合标准并且把第一个字母输入,第二重循环把长度小于4的单词过滤;然后再主函数里把所有单词比较有相同的计数;本来打算直接在函数里把所有单词直接比较然后输出,但是考虑到时间以及代码估计四重循环,就没有尝试。
#include <iostream> #include <cstring> #include <fstream> using namespace std; void func(char result[][100]); int main() { char result[100][100] = { 0 }; func(result); //调用func()这个时候result这个而且数组中都是单词了,且单词都是小写 char temp[100][100] = { 0 }; //这个二维数组是用来存放比较完的没有重复的单词 int count[100] = { 0 }; //用来计数 strcpy(temp[0], result[0]); //先将第一个单词放入temp int num = 1; for (int j = 0; *result[j]; j++) { //循环遍历所有的单词 for (int i = 0; *temp[i]; i++) { //循环存放的数组 if (!strcmp(temp[i], result[j])) { //存放数组中若是有这个单词就count++ count[i]++; } else if(i == num - 1){ //难点:没有的话,先判断这个时候i是不是已经在存放数组的最后一个元素了,不是话还要继续上面的循环直至遍历完存放的数组 strcpy(temp[num++], result[j]); //遍历完存放数组也没有该单词,就把这个单词放入存放数组中 } } } for (int i = 0; i < num - 1; i++) { //输出 cout << temp[i] << ":" << ‘\t‘ << count[i] << endl; } return 0; } void func(char result[][100]) { char buff[100]; ifstream in("D:\\source.txt"); int j = 0; char ch; if (in) { in >> noskipws; //不跳过空格 while (in >> ch) { //(¥) int i = 0; if (ch >= ‘A‘ && ch <= ‘Z‘ || ch >= ‘a‘ && ch <= ‘z‘) { //满足是字母的话就可以继续下面的程序(数字在接下来判断) buff[i++] = ch; } else { //否则不是单词跳转(¥)继续判断剩下的字符 continue; } while (in >> ch && ch >= ‘A‘ && ch <= ‘Z‘ || ch >= ‘a‘ && ch <= ‘z‘ || ch >= ‘0‘ && ch <= ‘9‘) { //通过while循环构造一个单词 buff[i++] = ch; } buff[i] = ‘\0‘; //单词是结束以\0结束 if (strlen(buff) >= 4) { //判断单词长度是不是大于等于4 strcpy(result[j++], strlwr(buff)); //是的话就将其保存到二维数组中去,并且在放进去的同时保证字母都是小写,为接下来的比较铺垫 } } in.close(); } }
个人总结:
通过这次的词频统计个人项目练习,对C++语言的使用更加的得心应手,刷新了对二维数组的认识。
以上是关于个人项目——词频统计的主要内容,如果未能解决你的问题,请参考以下文章