C++ 统计单词数

news/2024/9/16 17:51:39/文章来源:https://www.cnblogs.com/exception999/p/18405658

声明:本题目源自叮当码校园,如有侵权,请联系作者删除。

题目:

般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。现在,请你编程实现这一功能,县体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同,如果给定单词仅是文章中某一单词的一部分则不算匹配。.
【输入】
第1行为一个字符串,其中只含字母,表示给定单词:
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
【输出】
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始):如果单词在文章中没有出现,则直接输出一个整数-1。

输入:
To
to be or not to be is a question

输出:
2 0

#include <bits/stdc++.h>
using namespace std;int main()
{// str1存储要查找的单词string str1;// str2存储输入的句子string str2;// count代表单词出现的次数int count = 0;// index代表第一个单词出现的下标int index = -1;// 数据的获取getline(cin,str1);getline(cin,str2);// 分别确认单词的长度和句子的长度int len1 = str1.length();int len2 = str2.length();// 循环遍历句子的没给字符,遍历的长度需要减去单词的长度,后面不够一个单词的长度就没必要继续遍历了for(int i=0; i<len2-len1; i++){/*一个新单词的开始:1、下标刚好是开头0或者当前字符的前一个字符是空白符2、当前字符转大写后是A~Z中的某一个字母以上两个条件应同时满足*/if((i==0 || str2[i-1]==' ') && (toupper(str2[i])>='A' && toupper(str2[i])<='Z')){// 设定一个标记,假设我们会比对成功找到单词bool flag = true;// 循环遍历单词的长度,从单词0下标和句子的i位置开始逐一取出转大写的字符进行比较for(int j=0;j<len1;j++){/*此处str2下标使用i++:++在后,所以会先使用i的值作为str2下标和str1[j]进行比较比较完成后i才会执行++操作,也就意味着我们str2句子中下标会同时往前进1本条判断作用:如果字符不相同,则flag标记为false,也即否定了我们刚才的假设,同时结束继续往下比较的必要*/if(toupper(str2[i++]) != toupper(str1[j])){flag = false;break;}}/*单词比较完成找到指定单词的条件:1、flag仍然为true,也即我们的假设成立2、我们在句子中所找到的这个单词后面应该为一个空格或者是句子的末尾以上两个条件应同时满足关于这里的i:经过上方的for循环,句子中的i下标已经向右移动到了完成比较的字符的后一个位置*/if(flag && (str2[i] ==' ' || i == len2)){// 找到单词后对统计值+1count++;// index赋值,此处注意i应该减去单词的长度以使下标回到单词的开头if(index == -1) index = i-len1;}// 没找到单词,i应该减,因为for结构体完成后会执行括号中的i++导致句子中的i下标再次右移else i--;}}// 统计到了单词,输出正常的结果if(count != 0)cout << count << " " << index;// 没统计到单词,按要求输出-1else cout << "-1";return 0;
}

  

 

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

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

相关文章

WRF设置模式垂直层

翻译自WRF论坛https://forum.mmm.ucar.edu/threads/stretched-vertical-levels-information.14975/#post-37729设置模式垂直层​ Eta 层由 real 自动计算,基于namelist选项“e_vert.”所设置的层数。然而,完整的eta 层次可以由namelist选项“eta_levels.”来显式的指定。层次…

3.MR

MR一.MR概述1.mr定义Mr是一个分布式运算程序的编程框架,是用户开发”基于hadoop的数据分析应 用”的核心框架Mr核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整地 分布式运算程序,并发运行在一个hadoop集群上2.mr优缺点2.1.优点(1)易于编程.用户只关心业务逻辑…

4.MR(1)

2.mapreduce工作流程流程一流程二3.shuffle3.1.shuffle机制map方法之后,reduce方法之前的数据处理过程称之为shuffle3.2.分区3.3.writablecomparable排序(1)排序概述(2)排序分类3.4.combiner合并

5.MR(2)

4.输出数据outputformat接口实现类5.mapreduce内核源码解析5.1.maptask工作机制(1)read阶段:maptask通过inputformat获得的recordreader,从输出 inputsplit中解析一个个key/value5.2.reducetask工作机制5.3.reducetask并行度决定机制6.join6.1.reduce join6.2.map join7.数据清…

南京某大学入门知识

某大学入门知识一家之言,不必在意。 某高校文档镇楼https://github.com/SurviveSJTU/SurviveSJTUManual 地图 雷丁楼 楼主参加融媒体中心报名时,去过一次,其他时候没去过(雷丁学院,类似于与国外合作的专业) 东苑体育场 有体育馆,有室内羽毛球(二楼),击剑(二楼),健…

Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究

原文链接:https://tecdat.cn/?p=37634 原文出处:拓端数据部落公众号 本文聚焦于利用马尔可夫递归神经网络(MarkovRNN)结合树库展开建模工作。MarkovRNN 通过整合马尔可夫特性与离散随机变量来深入探索递归神经网络中的随机转换机制,旨在高效处理具有复杂潜在信息的高度结…

CUDA

1、GPU准备 1、查看GPU类型 GeForce RTX 30602、查看算力https://en.wikipedia.org/wiki/CUDA#GPUs_supported算力8.63、确定CUDA Runtime 支持的CUDA SDK为11.1-12.54、查看驱动的Driver Version CUDA Version 为12.3所以适用的CUDA 11.1-12.3 2、更新显卡驱动 1、下载了最新显…

碳酸锂 短线

大周期:3分钟短线:

【LLM训练系列】从零开始训练大模型之Phi2-mini-Chinese项目解读

一、前言 本文主要是在复现和实践Phi2-mini-Chinese后,简要分析下Phi2-mini-Chinese这个项目,做一个学习实战总结。 原文发布于知乎:https://zhuanlan.zhihu.com/p/718307193,转载请注明出数。 Phi2-mini-Chinese简介 Phi2-Chinese-0.2B 从0开始训练自己的Phi2中文小模型,…

第20篇 window系统安装Redis流程

1.下载 Redis for Windows Redis 官方并没有提供 Windows 版本的安装包,但你可以使用 Microsoft 维护的 Windows 版本的 Redis。你可以从以下链接下载 Redis for Windows:2.安装 Redis 运行安装程序: 双击下载的 .msi 文件,启动安装程序。 按照安装向导的提示进行安装。这里…

C++顺序结构(1)任务

1、下载并观看视频(照着做,多看几遍) https://www.jianguoyun.com/p/DWCNkNEQi8_wDBj5ptYFIAA 2、两项照着做的任务

xlam插件制作实验手册

大家来和笔者一起做一个xlam插件吧。很简单,很详细。 楔子excel支持自定义菜单栏,但是我在搜索如何制作菜单栏,以及如何制作addin文件的时候,即使是最好的例子,也只是点到为止,做了一个按钮就结束了。想要再进一步,竟然就没有合适的二手资料了。所以自然笔者就决定自己补…