作业3词频统计

(1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。

答:

 从文件读取遍历字符串大写转小写将句子分隔成一个个单词判断是否为单词计算单词出现的频率
预估时间10minutes10minutes20minutes40minutes1hours2hours
实际时间5minutes5minutes15minutes1hours2hours2hours

         在写这次作业之前我认为只是一个简单统计题,但是看了一眼老师的要求之后,就开始有点疯了。一个要求一个要求的提出来,重叠在一起,我就发现无从下手了。又是大小写不区分,又是单词的要求长度不小于4,什么什么的。我发现就这么一个简单的编程题能被老师改成这样,老师真是煞费苦心啊。既然要求这么多,我就把每个要求一个一个拆开分析,然后再试着将他们组装起来。

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;struct Num{int num;char *s;
};Num word[999];int Change(char str[999])//大写转小写
{int a = 0;while (str[a] != '\0')//当str字符串未结束时将大写字母转小写{if (str[a] >= 'A'&&str[a] <= 'Z')str[a] = str[a] + 32;//因为大写字母与小写字母的ascll码值相差32,大写转小写要加上32a++;}return 0;
}
int Judge(char w[])//判断是否符合题意的单词
{for (int e = 1; w[e] != '\0';){if(strlen(w)<4)//判断单词字长是否超过以及等于4return -1;if (w[e] >= 'a' && w[e] <= 'z')//判断单词的首字符是否是字母return -1;if (!((w[e] >= 'a' && w[e] <= 'z') || (w[e] >= '0' && w[e] <= '9')))//判断单词中是否有非字母数字return -1;elsee++;}return 0;
}
int Fre(char f[],int total )   //统计单词出现过的频率
{if (total>0)for (int i = 0; i <total; i++){if (!strcmp(f, word[i].s))  {word[i].num++;      return -1;}}return 0;
}int main()
{   char sentence[999];ifstream file("d://test.txt");   //读取if (!file){cout << "Unable to open ";exit(1);   }while (!file.eof()){file.getline(sentence,999);}file.close();const char *delim = ",“”.' '‘’!?";  //delim是用来定义分隔符的内容char *p= strtok(sentence, delim);//strtok函数根据分隔符分隔字符串int n=0;int c=0;while (p){Change(p);if (Judge(p) != -1){if (Fre(p, n)!=-1){word[n].s = p;n++;}}p = strtok(NULL, delim);}while (word[c].s)        //输出统计结果{cout << word[c].s<< ":" << word[c].num << '\n';c++;}return 0;
}

  我按照我模块的顺序即 从文件中读取——>大写字母转为小写字母(为了不区分大小写,函数为Change)——>把句子按照分隔符分割开来(运用strtok函数)——>判断是否符合题意的单词(函数为Judge)——>计算单词出现的频率(函数Fre)。

运行出的结果:

 

 

 

总结:在这次编写过程中,我发现这个果然一点都不简单。说起来一套一套的,但是真正实施起来还是很有难度的。除了一个读取文件原先写过之外其他的感觉都是第一次接触。第一个大写转小写在汇编里写的很顺溜,但是在C++中是第一次写,课本中并没有提及,所以只能借助百度来解决,百度还真有,所以第二个模块解决了。分隔句子又是一个大难题,于是我再次借助百度大神来,但是百度上的答案都不一样,所以我挑了一个我最能理解方式利用strtok(char s[],const char *delim)函数来写。利用delim定义分隔符。第三个模块完成。判断单词的条件,第一判断字长不小于4,第二判断首字母是否为字母,第三判断字母中是否有非字母数字。这个是借助大神帮忙,才能够写出来,这个真的很难啊。花了我不少心血啊。第四个模块完成。然后最重点的来了,计算词频。用指针访问单词在与下一个单词比较,相同加一,知道访问到字符串末尾在结束。

将他们组合起来更是花了好长时间。

希望以后老师在布置作业的时候,能够将每一次的交作业时间用红色标注一下,不要模棱两可的给个时间!!

转载于:https://www.cnblogs.com/wumin2/p/5284888.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image

MATLAB报错Invalid ADAPTORNAME specified. Type imaqhwinfo for a list of available ADAPTORNAMEs. Image acquisition adaptors may be available as downloadable support packages. Open Support Package Installer to install additional vendors. 这时需要安装两个安装…

陈天奇:十年机器学习科研之路(附链接)

来源&#xff1a;深度学习自然语言处理链接&#xff1a;https://zhuanlan.zhihu.com/p/74249758导读十年前&#xff0c;MSRA的夏天&#xff0c;刚开始尝试机器学习研究的我面对科研巨大的不确定性&#xff0c;感到最多的是困惑和迷茫。十年之后&#xff0c;即将跨出下一步的时候…

QT示例:基于TCP 点对多Socket通讯(server,clients)

QT示例&#xff1a;基于TCP 点对多通讯&#xff08;server,clients&#xff09;一、服务器server二、客户端Client下载&#xff1a;基于TCP 点对多Socket通讯 一、服务器server 因为对于客户端来说&#xff0c;只能连接一个服务器。而对于服务器来说&#xff0c;它是面向多连…

MATLAB GUI的CreateFcn如何创建

看MATLAB关于GUI代码的时候发现有一些function _CreateFcn(hObject, eventdata, handles)函数&#xff0c;那么这类函数是如何创建出出来的呢&#xff1f; 首先在MATLAB中输入guide&#xff0c;打开其中一个GUI文件&#xff0c;现在随便打开一个我之前创建好的GUI&#xff1a;…

文小刚:量子革命是最不可思议的物理革命

来源&#xff1a;科学网人类生活在一个怎样的世界里&#xff1f;凝聚态理论物理学家、美国麻省理工学院终身教授、美国科学院院士文小刚的答案是&#xff1a;“我们生活在量子计算机里面。量子信息是真实的&#xff0c;而所看到的各种物质、人&#xff0c;都是量子信息的虚拟反…

QT+Halcon综合示例:clip回形针2D位姿检测

QTHalcon综合示例&#xff08;一&#xff09;&#xff1a;clip回形针2D位姿检测0、halcon源码&#xff1a;1、Qt代码&#xff1a;2、运行结果&#xff1a;下载&#xff1a;clip回形针2D位姿检测 0、halcon源码&#xff1a; * clip.hdev: Orientation of clips * dev_close_w…

MATLAB GUI如何创建Callback函数

本文以创建按钮的Callback函数为例介绍了在MATLAB如何在GUI中创建Callback函数 首先在MATLAB中输入guide&#xff0c;打开GUI文件&#xff0c;这里我随机打开一个我之前创建的GUI文件&#xff1a; 假设现在要创建start按钮的Callback函数&#xff0c;则双击该按钮&#xff0c;…

互联网50年:从信息高速公路到超级智能的进化

来源&#xff1a;战略前沿技术编者按&#xff1a;2019年&#xff0c;迎来互联网诞生50周年。本文根据中信出版社7月出版的《崛起的超级智能&#xff1a;互联网大脑如何影响科技未来》一书的内容和观点&#xff0c;重点阐述了互联网是如何在50年中发生重大变化&#xff0c;如何促…

MATLAB摄像头可以运行但是打不开视频

今天在学习一个MATLAB关于摄像头操作的代码&#xff0c;运行之后摄像头会一闪一闪&#xff0c;但是就是打不开视频的画面&#xff0c;查看了半天代码发现代码也没有错&#xff0c;最后尝试着将代码中的下面这句中的320x240改为640x480就可以打开视频了 vid videoinput(winvid…

大脑简史(2)-研究大脑的手段

来源&#xff1a;人机与认知实验室上篇文章笔者和大家分享了认知神经科学历史上的大事件&#xff0c;这些大事件有的极大程度的改变了人们的思维&#xff0c;有的直接推动了神经科学的发展&#xff0c;可以这么说&#xff0c;没有这些前人的努力&#xff0c;就没有我们现在取得…

stm32_DMA采集一个AD数据_并通过DMA向串口发送

这是以前学32的时候写的&#xff0c;那时候学了32之后感觉32真是太强大了&#xff0c;比51强的没影。关于dma网上有许多的资料&#xff0c;关于dma采集ad网上也有很多。亲们搜搜&#xff0c;这里只贴代码了&#xff0c;其实我也想详详细细地叙述一番&#xff0c;但是自己本身打…

QT综合示例:QT串口通信

QT综合示例&#xff1a;QT串口通信0、界面&#xff1a;1、代码&#xff1a;如果用qt写程序作为上位机&#xff0c;然后通过和usb和下位机通信的时候&#xff0c;就需要用到qt中的串口通信了。 0、界面&#xff1a; 1、代码&#xff1a; 1&#xff09;.pro 添加&#xff1a; …

MATLAB GUI如何制作下拉列表

MATLAB在GUI中可以实现下图所示的下拉列表&#xff1a; 方法&#xff1a; 在MATLAB中输入guide打开一个现有的GUI或者新建一个GUI放置一个弹出式菜单&#xff0c;如图所示双击新建的弹出式菜单&#xff0c;打开检查器&#xff0c;点击检查器的“string”菜单栏右侧的按钮&…

如果每个人都是一个粒子…… | 从物理学中寻找社会规律

来源&#xff1a;环球科学人类的许多社会行为似乎是难以捉摸的&#xff0c;包括经济、交通、个人选择。不少科学家尝试从物理的角度解释人类社会&#xff0c;他们将人比作粒子&#xff0c;每个个体之间的行为、选择都会互相影响。就像物理粒子会受到不同类型的力的控制&#xf…

猎豹MFC--文件对话框CFileDialog

如下叫做打开文件对话框&#xff1a;CFileDialog类在对话框上添加文本框&#xff0c;接收回车键设置&#xff0c;多行&#xff0c;编辑修改ID&#xff0c;垂直滚动条 水平滚动条 属性设置。添加菜单资源&#xff1a;这个菜单是给主窗口使用的&#xff0c;所以在主窗口对话框属…

MATLAB的GUI界面不显示XY坐标轴

在GUI中创建一个坐标轴&#xff0c;默认会显示XY坐标&#xff0c;如下图&#xff1a; 如何关闭XY坐标轴呢&#xff1f; 首先在打开GUI界面&#xff0c;双击该坐标轴&#xff0c;在Xcolor和Ycolor中选择白色&#xff0c;将坐标轴设置为白色&#xff1a; 然后在xticklabel和ytic…

机器人工作原理的超详细解析,生动、形象!

来源&#xff1a;笑看国际风云很多人一听到“机器人”这三个字脑中就会浮现“外形酷炫”、“功能强大”、“高端”等这些词&#xff0c;认为机器人就和科幻电影里的“终结者”一样高端炫酷。其实不然&#xff0c;在本文中&#xff0c;我们将探讨机器人学的基本概念&#xff0c;…

数字图像处理:图像变换的基本模型

数字图像处理&#xff1a;图像变换的基本模型 一、常用图象的变换模型 变换模型是指根据待匹配图像与背景图像之间几何畸变的情况&#xff0c;所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等&am…

Nginx 的线程池与性能剖析【转载】

正如我们所知&#xff0c;NGINX采用了异步、事件驱动的方法来处理连接。这种处理方式无需&#xff08;像使用传统架构的服务器一样&#xff09;为每个请求创建额外的专用进程或者线程&#xff0c;而是在一个工作进程中处理多个连接和请求。为此&#xff0c;NGINX工作在非阻塞的…

Halcon算子学习:XLD几种边缘连接函数

Halcon算子学习&#xff1a;XLD几种边缘连接函数 1.union_cotangential_contours_xld (Contours : UnionContours : FitClippingLength, FitLength, MaxTangAngle, MaxDist, MaxDistPerp, MaxOverlap, Mode : ) 根据输入的轮廓的端点处的局部曲率&#xff0c;连接曲率满足一定…