统计并输出所读入的单词出现的次数

简介: 题目:编写程序统计并输出所读入的单词出现的次数。 解答: 可以建立一个map对象,保存所读入的单词及其出现次数(以单词为键,对应的值为单词的出现次数)。 对于map容器,如果下标所表示的键在容器中不存在,则添加新元素,利用这一特性可编写程序如下: //通过建立map对象保存所读入的单词及...

题目:编写程序统计并输出所读入的单词出现的次数。

解答:

可以建立一个map对象,保存所读入的单词及其出现次数(以单词为键,对应的值为单词的出现次数)。

对于map容器,如果下标所表示的键在容器中不存在,则添加新元素,利用这一特性可编写程序如下:

//通过建立map对象保存所读入的单词及其出现次数,
//统计并输出所读入的单词出现的次数
#include<iostream>
#include<map>
#include<string>
using namespace std;

int main()
{
	map<string , int> wordCount;
	string word;

	//读入单词并统计其出现次数
	cout<<"Enter some words(Ctrl+Z to end):"
		<<endl;
	while(cin>>word)
		++wordCount[word];  //word的出现次数加1

	//输出结果
	cout<<"word\t\t"<<"times"<<endl;
	for(map<string , int>::iterator iter = wordCount.begin() ; iter != wordCount.end() ; ++iter)
		cout<<(*iter).first<<"\t\t"
		    <<(*iter).second<<endl;

	return 0;
}

 如要求使用insert函数代替下标运算,重写程序。

解答:

使用insert函数对map对象进行插入操作时,如果试图插入的元素所对应的键已经在容器中,则insert将不做任何操作。而且,带一个键-值pair形参的insert函数将返回一个pair对象,该对象包含一个迭代器和一个bool值,其中迭代器指向map中具有相应键的元素,而bool值则表示是否插入了该元素。

利用上述特点,可编写程序如下:

//通过建立map对象保存所读入的单词及其出现次数,
//统计并输出所读入的单词出现的次数。
//其中使用insert函数代替下标操作
#include<iostream>
#include<map>
#include<utility>
#include<string>
using namespace std;

int main()
{
	map<string , int> wordCount;
	string word;

	//读入单词并统计其出现次数
	cout<<"Enter some words(Ctrl+z to end):"
		<<endl;
	while(cin>>word)
	{
		//插入元素<word , 1>
		pair<map<string , int>::iterator , bool> ret = wordCount.insert(make_pair(word , 1));
		if(!ret.second) //该单词已在容器中存在
			++ret.first->second; //将该单词的出现次数加1
	}

	//输出结果
	cout<<"word\t\t"<<"times"<<endl;
	for(map<string , int>::iterator iter = wordCount.begin() ; iter != wordCount.end() ; ++iter)
		cout<<(*iter).first<<"\t\t"
		    <<(*iter).second<<endl;

	return 0;
}

 使用下标操作的程序更简洁,更容易编写和阅读,而insert函数的返回值的使用比较复杂。但是用insert函数可以避免使用下标操作所带来的副作用,即避免对新插入元素的不必要的值初始化,而且可以显示表示元素的插入(下标操作是隐式表示元素的插入),有其优点。

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

相关文章
|
存储 缓存 负载均衡
【2022持续更新】大数据最全知识点整理-HBase篇
【2022持续更新】大数据最全知识点整理-HBase篇
1435 0
【2022持续更新】大数据最全知识点整理-HBase篇
|
8月前
|
机器人 API
【Azure Bot】在中国区的Bot Service上打通Teams Channel注意事项
在中国区的Azure上,已经可以创建机器人服务(Bot Service:https://docs.azure.cn/zh-cn/bot-service/?view=azure-bot-service-4.0),目前可以使用集成的渠道有三种(Direct Line,Web Chat 和 Microsoft Teams):Direct Line 和 Web Chat方式就非常直接,嵌入到自己应用的网页就可以。但是使用Microsoft Teams,则有很多限制。本文主要就是介绍,如果您的机器人服务部署在中国区上,并且需要使用Microsoft Teams时候的注意事项
214 13
|
监控 Java API
使用Spring Boot构建企业级应用的实践
使用Spring Boot构建企业级应用的实践
|
8月前
|
人工智能 Kubernetes Cloud Native
跨越鸿沟:PAI-DSW 支持动态数据挂载新体验
本文讲述了如何在 PAI-DSW 中集成和利用 Fluid 框架,以及通过动态挂载技术实现 OSS 等存储介质上数据集的快速接入和管理。通过案例演示,进一步展示了动态挂载功能的实际应用效果和优势。
|
消息中间件 存储 NoSQL
MQ的顺序性保证:顺序队列、消息编号、分布式锁,一文全掌握!
【8月更文挑战第24天】消息队列(MQ)是分布式系统的关键组件,用于实现系统解耦、提升可扩展性和可用性。保证消息顺序性是其重要挑战之一。本文介绍三种常用策略:顺序队列、消息编号与分布式锁,通过示例展示如何确保消息按需排序。这些方法各有优势,可根据实际场景灵活选用。提供的Java示例有助于加深理解与实践应用。
760 2
|
安全 Linux 网络安全
如何使用Docker部署WPS Office服务并实现无公网IP远程处理文档表格(一)
在群晖NAS上使用Docker部署WPS Office并结合Cpolar内网穿透的步骤包括: 1. 通过SSH命令行拉取`linuxserver/wps-office`镜像。 2. 在群晖容器管理界面运行镜像,设置启动选项和端口映射。 3. 本地访问群晖IP:3000端口以使用WPS Office。 4. 安装Cpolar套件,手动添加并安装到群晖,通过9200端口访问其Web管理界面。 5. 使用Cpolar配置内网穿透,实现远程访问WPS Office。 这一过程允许用户即使在没有公网IP的情况下,也能通过Cpolar将内网的WPS Office服务暴露到公网,便于远程办公和文档处理。
|
Web App开发 数据安全/隐私保护
文献管理Zotero使用方法介绍
本文介绍文献管理软件Zotero的基础使用方法,包括软件下载与安装、文献与PDF导入、在Word中插入参考文献等的方法~
754 1
文献管理Zotero使用方法介绍
|
存储 前端开发 测试技术
Android 官方架构中的 UseCase 该怎么写?
Android 官方架构中的 UseCase 该怎么写?
339 0
|
5G 网络架构
5G 系统网络架构 | 带你读《5G 无线系统设计与国际标准》之四
为了适应各种部署场景,5G 支持了两种部署方式:一种为分布式部署,这种方式与 LTE系统类似,网络由基站组成,基站支持全协议栈的功能;另一种为集中式部署,基站进一步分为集中单元(CU,Centralized Unit)和分布单元(DU,Distributed Unit)两个节点,CU 和 DU 分别支持不同的协议栈和功能,
5G 系统网络架构  | 带你读《5G 无线系统设计与国际标准》之四
|
算法 机器人 API
使用 XZ Utils 获得更高的压缩率
关于 XZ Utils XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。
1181 0

热门文章

最新文章