当前位置: 首页 > news >正文

P1308 [NOIP 2011 普及组] 统计单词数

题目链接 P1308 [NOIP 2011 普及组] 统计单词数

题目 # P1308 [NOIP 2011 普及组] 统计单词数

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例 1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例 2)。

输入格式

共 $2$ 行。

第 $1$ 行为一个字符串,其中只含字母,表示给定单词;

第 $2$ 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 $0$ 开始);如果单词在文章中没有出现,则直接输出一个整数 $-1$。

注意:空格占一个字母位

输入输出样例 #1

输入 #1

To
to be or not to be is a question

输出 #1

2 0

输入输出样例 #2

输入 #2

to
Did the Ottoman Empire lose its power at that time

输出 #2

-1

说明/提示

数据范围

$1\leq $ 第一行单词长度 $\leq10$。

$1\leq $ 文章长度 $\leq10^6$。

noip2011 普及组第 2 题

代码
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main(){ios::sync_with_stdio(false);cin.tie(0);string s1,s2;getline(cin,s1);getline(cin,s2);for(char &ch:s1) ch=tolower(ch);for(char &ch:s2) ch=tolower(ch);int first_pos=-1;size_t start=0;int cnt=0;size_t pos;while((pos=s2.find(s1,start))!=string::npos){bool left_ok=(pos==0)||(s2[pos-1]==' ');bool right_ok=(pos+s1.size()==s2.size())||(s2[pos+s1.size()]==' ');if(left_ok && right_ok){if(first_pos==-1) first_pos=pos;cnt++;}start=pos+s1.size();}if(first_pos!=-1) cout<<cnt<<' '<<first_pos;else cout<<-1;
}
小结
大小写转换#include<cctype>for(char &ch:s) ch=tolower(ch);  转小写for(char &ch:s) ch=toupper(ch);  转大写

查找指定字符串
#include<string>
s.find(sub);  在s中查找sub
s.find(sub,pos);  在s中从pos开始查找sub如果找到,返回所查找字符串第一个字符在字符串的下标
否则,返回 string::npos判断是否找到:s.find(s1)!=string::npos

size_t
无符号整数类型,没有负数
常用来表示字符串长度,数组下标,查找位置

本题用left_ok和right_ok来确保边界正确
bool left_ok = (pos==0) || (s2[pos-1]==' ');
bool right_ok = (pos+s1.size()==s2.size()) || (s2[pos+s1.size()]==' ');
http://www.jsqmd.com/news/614445/

相关文章:

  • Windows 7 虚拟机 VMware Tools 安装失败:无法自动安装VSock 驱动程序
  • 第二十五章 CI/CD 演进:在安全与敏捷间走钢丝的发布机制
  • Maxscript必收的自定义函数与方法精选!
  • JavaScript中骨架屏Skeleton在异步数据加载中应用
  • 树莓派4B学习笔记——IO通信篇(SPI)
  • 通用构建优化(编译阶段)+ Vue 专属运行时优化 + React 专属运行时优化
  • All in AI:企业必须关注的7个网络安全技术发展趋势
  • 专注知识产权维权哪家专业 - 品牌企业推荐师(官方)
  • 8大网盘直链解析终极指南:免费解锁5倍下载速度的完整解决方案
  • MindSpore 环境配置完全指南嗽
  • 树莓派4B学习笔记——IO通信篇(1-Wire)
  • 语义分块提升RAG检索精度
  • gopher-os社区贡献指南:从代码提交到功能开发的完整参与流程
  • Redis持久化:从AOF到RDB,如何实现数据不丢失?澈
  • 在嘉兴有靠谱的工业纸筒加工厂吗? - 品牌企业推荐师(官方)
  • 阿里云盘Refresh Token获取工具使用指南:轻松实现云盘授权与自动化管理
  • 011 Linux环境熟悉——IMX6ULL嵌入式开发环境配置
  • 中设智控亮相第二十四届国际TnPM设备运维大会 | AI赋能设备管理一体化解决方案重磅发布 重构设备资产精益管控新生态
  • Golang bytes.Buffer怎么用_Golang Buffer教程【对比】
  • 实测好用!Qwen3-Embedding-4B一键部署教程,轻松搞定长文档向量化
  • 树莓派4B学习笔记——IO通信篇(UART)
  • FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香!找
  • 终极指南:如何免费解锁Cursor Pro高级功能完整教程
  • TF-IDF BM25 原理及应用
  • PDE (Processing D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v..爸
  • Vue-Multiselect 安全防护终极指南:彻底防范 XSS 攻击与数据注入威胁
  • 断崖式下跌!最强AI也搞不定长期开发:代码堆得越多系统崩得越快
  • React Express JSX语法详解:如何编写高效的React组件
  • 集成AI 的 Redis 客户端 Rudist发布新版了诒
  • SEATA分布式事务——AT模式郝