【C/C++ 07】词频统计

一、题目

读入一篇英文短文,去除介词、连词、冠词、副词、代词等非关键性单词后,统计每个单词出现的次数,并将单词按出现次数的降序和单词字符的升序进行显示5个单词。

二、算法

1. 通过<fstream>库创建fstream流对象,并从文件中读取全部字符存入内存。

2. 将内存的字符串进行空格、标点符号、换行符的分割,若分割后的单词属于需要记入统计的单词,则将其存入map容器中,通过map进行词频统计。

3. 对map中的词频统计结果写入vector中进行排序,并按照规定的排序顺序进行打印。

三、代码

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>
#include <fstream>
#include <cstring>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;// 不计入统计的单词表:介词、连词、冠词、副词、代词
vector<string> g_delWord = {"to", "in", "on", "for", "of", "from", "between", "behind", "by", "about", "at", "with", "than","a", "an", "the", "this", "that", "there","and", "but", "or", "so", "yet","often", "very", "then", "therefore","i", "you", "we", "he", "she", "my", "your", "hes", "her", "our", "us", "it", "they", "them","am", "is", "are", "was", "were", "be","when", "where", "who", "what", "how","will", "would", "can", "could"
};// 仿函数
struct Compare
{bool operator()(const pair<string, int> e1, const pair<string, int> e2){return e1.second > e2.second;}
};int main()
{// 1. 读入文件数据//    ofstream:写文件//	  ifstream:读文件//	  fstream:读写文件fstream f;//	  ios::in//	  ios::out//	  ios::app,追加写,配合ios::out使用//	  ios::trunc,覆盖写,配合ios::out使用//	  ios::binary,以二进制的形式f.open("./test1.txt", ios::in);if (!f.is_open()){cout << "file open failed!" << endl;return 1;}char text[4096] = { 0 };f.read(text, 4096);// 2. 分割字符串存入mapmap<string, int> wordMap;const char* cut = " ,.!?;:\n";	// 部分单词分隔符char* w = strtok(text, cut);while (w){string word = w;// 单词转小写string lwrWord;transform(word.begin(), word.end(), back_inserter(lwrWord), ::tolower);// 排除不计入统计的单词if (find(g_delWord.begin(), g_delWord.end(), lwrWord) == g_delWord.end()){wordMap[lwrWord]++;// map 的 “[]”重载,有插入、查询、修改功能,返回值为键值对的second值或false}w = strtok(NULL, cut);}// 3. 词频排序vector<pair<string, int>> wordVec;for (auto& e : wordMap){wordVec.push_back(e);}// sort是基于快速排序实现的算法,是不稳定的排序算法,可用stable_sort代替stable_sort(wordVec.begin(), wordVec.end(), Compare());for (int i = 0; i < 5; ++i){cout << "<" << wordVec[i].first << "," << wordVec[i].second << ">" << endl;}return 0;
}

四、测试

测试文档test1.txt

No one can help others as much as you do. 
No one can express himself like you. 
No one can express what you want to convey. 
No one can comfort others in your own way. 
No one can be as understanding as you are. 
No one can feel happy, carefree, and no one can smile as much as you do. 
In a word, no one can show your features to anyone else.
hi, how are you? I love you!

运行结果

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

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

相关文章

uniapp【组件封装】时间戳格式化为星期

组件 components/dos-week.vue <template><text>{{week}}</text> </template> <script>export default {props: {time: String},mounted(e) {this.week this.getWeek(Number(this.time))},data() {return {week: }},methods: {// 通过时间戳计…

美区或其他外区Appstore账号AppleID注册教程,简单快速,苹果必备!

▍前言 现在越来越多的APP在国区APPstore下架&#xff0c;如果想有更好的使用体验&#xff0c;不得不去外区下载APP&#xff0c;那就需要一个外区的apple id&#xff0c;注册也很简单&#xff0c;今天大鹏通过电脑ipad给大家注册一个&#xff0c;建议大家直接使用iPhone或者iPa…

python魔法函数[全面]

1、init 用于初始化对象的属性和状态 当创建一个对象时&#xff0c;Python会自动调用该对象的__init__方法。 这个方法用于初始化对象的属性和状态&#xff0c;是对象创建过程中的一个重要环节 2、new # 通常我们不需要重写__new__方法&#xff0c;除非我们正在进行一些非常…

好书推荐丨保姆级Midjourney教程,这本写给大家看的设计书闭眼入!

文章目录 写在前面好书推荐Part.1Part.2Part.3 粉丝福利写在后面 写在前面 在AI绘画界&#xff0c;有每日经典一问&#xff1a;“你今天用Midjourney画了啥&#xff1f;”晒作品成为重头戏。 小红书上关于Midjourney出的图片点赞数惊人。 reddit上的恶搞幽默图片热度居高不下…

GSM-TRIAL-21.04.9-VMware-Workstation.OVA安装教程,GreenBone虚拟机安装教程

将GSM-TRIAL-21.04.9-VMware-Workstation.ova用VMware打开 先设置好网络和内存&#xff1a; 1、打开虚拟机&#xff0c;显示&#xff1a;你的GSM还不能完全正常工作。您想现在完成设置吗? 点击yes 2、创建用户&#xff0c;一会儿登录网页要用&#xff0c;点击yes 3、创建用户…

指向 Data Member 的指针

看一下很简单的一个例子&#xff1a; #include <stdlib.h> #include <stdio.h> #include <malloc.h>class origin { public:virtual ~origin(){} public:int x; };int main() {origin A;printf("&origin::x %p, &A.x %p\n", &origi…

OpenGL查询对象 Query Objects

查询对象和异步查询(Query Objects and Asynchronous Queries) Query Objects&#xff08;查询对象&#xff09;是OpenGL中的一种机制&#xff0c;用于获取有关一系列GL命令处理过程的信息。这些信息可以包括&#xff1a; 绘图命令处理的图元数量。写入变换反馈缓冲区的图元数…

小黄鸭聊电脑(4)硬盘分区

小黄鸭聊电脑(4)硬盘分区 夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你说的那个“分区”和“格式化”是什么意思&#xff1f; 冰箱&#xff1a;…

洛夫克拉夫特与文学中的超自然恐怖:前哥特时代

洛夫克拉夫特与文学中的超自然恐怖&#xff1a;前哥特时代 ![ 洛夫克拉夫特是美国恐怖、科幻与奇幻小说作家&#xff0c;尤以其怪奇小说著称&#xff0c;他在自己的一系列小说中开发出了克苏鲁神话体系。他的创作对后世恐怖小说创造影响深远&#xff0c;我们可以在许多当代文…

[leetcode] 21. 合并两个有序链表

文章目录 题目描述解题方法双指针遍历java代码 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff…

自动驾驶:Apollo如何塑造人类的未来出行

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言1. 什么是自定义指令&#xff1f;2. Apollo中的自定义指令2.1 查询中的自定…

sqlalchemy——@listens_for

问&#xff1a;sqlalchemy如何实现&#xff1a;表中指定数据更新时&#xff0c;其time字段自动更新&#xff1f;答&#xff1a;使用listens_for 装饰器来注册事件监听器&#xff0c;确保在项目数据更新时触发相应的处理逻辑。 示例代码如下&#xff1a; # coding: utf-8 impo…

Vue2组件注册:全局组件和局部组件

在Vue 2 中&#xff0c;你可以使用全局注册和局部注册两种方式注册组件。以下是两种方式的示例&#xff1a; • 全局注册 全局注册的组件可以在整个应用中使用&#xff0c;适用于高频的通用组件。 // 在 main.js 或者入口文件中 import Vue from vue import App from ./App.v…

鸿蒙HarmonyOS——AVSession开发指导

AVSession开发指导 说明&#xff1a; AVSession的所有接口均为系统接口&#xff0c;其功能仅提供给系统应用使用。 会话接入端开发指导 基本概念 会话元数据AVMetadata: 媒体数据相关属性&#xff0c;包含标识当前媒体的ID(assetId)&#xff0c;上一首媒体的ID(previousAsset…

17. Spring Boot Actuator

17. Spring Boot Actuator Spring Boot执行器(Actuator)提供安全端点&#xff0c;用于监视和管理Spring Boot应用程序。 默认情况下&#xff0c;所有执行器端点都是安全的。 在本章中&#xff0c;将详细了解如何为应用程序启用Spring Boot执行器。 启用Spring Boot Actuator …

光纤熔接-热熔

实验教学日的及具体要求 目的 1.掌握室外光缆、皮线光缆的开剥方法。 2.掌握应用光纤切割刀制作光纤端面的方法 3.掌握光纤熔接的基本知识。 4.掌握光纤熔接机的使用方法及接续步骤。 任务 1.完成2芯光缆在终端盒内与尾纤的熔接 2.用激光笔完成光纤熔接检测。 …

如何使用mock.js实现接口测试的自动化?

Mock.js 基础用法介绍 Mock.js是一个常用于生成随机数据和拦截Ajax请求的JavaScript库。本文将介绍Mock.js的用法&#xff0c;包括安装和基础用法&#xff0c;在开始前我们可以看下看&#xff1a;了解 Mock.js 的语法规范。 安装 可以通过npm安装Mock.js&#xff1a; npm i…

Debezium发布历史94

原文地址&#xff1a; https://debezium.io/blog/2020/09/16/debezium-1-3-beta2-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 1.3.0.Beta2 发布 2020 年 9 月 16 日 作者&#xff1a; Gu…

敏捷认证大热:PMI-ACP

你是否在寻找一个能让你在不断变化的职场环境中脱颖而出的认证&#xff1f;PMI-ACP正是你需要的&#xff01;这个由美国项目管理协会PMI颁发的认证&#xff0c;是全球敏捷项目管理领域的权威代表。无论你是希望转型到项目管理领域&#xff0c;还是想提升现有项目管理技能&#…

代码随想录算法训练营第二十三天|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669.修剪二叉搜索树 public class Solution {public TreeNode TrimBST(TreeNode root, int low, int high) {if(rootnull){return null;}if(root.val<low){var rightTrimBST(root.right,low,high);return right;}if(root.val>high){var leftTrimBST(root.left,low,high)…