P1308 [NOIP2011 普及组] 统计单词数(模拟加函数+数学分析)

简介: P1308 [NOIP2011 普及组] 统计单词数(模拟加函数+数学分析)

题目描述



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


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


输入格式



共2 行。


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


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


输出格式



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


输入输出样例



输入  

To

to be or not to be is a question


输出 #1复制

2 0


输入

to

Did the Ottoman Empire lose its power at that time


输出  

-1


说明/提示



数据范围


1≤ 单词长度 ≤10。


1≤文章长度≤1,000,000


noip2011普及组第2题


题目分析,这道题要非常非常细心,首先我们知道回车键是也是一个字符,所以我们可以用getchar()来”吞掉“,不然会除,第二就是我们查的是单词所以我们吧查的字符串2边都加上空格,最后我们要在查找上面的字符串第一位加个空格,不然会出现查不到第一位单词,大概出错点就最些,剩下的就是模拟,具体实现看代码。


#include<bits/stdc++.h> 
using namespace std;
int main()
{
  string a,b;
  cin>>a;
  getchar();//一定要加这个,xdm; 
  transform(a.begin(),a.end(),a.begin(),::tolower);//使a小写化 
  getline(cin,b);//可以读入含空格的字符串,cin不能; 
  b.insert(0," ");//让b前面加个空格 之后用find不怕查不到第一个 
  a=' '+a+' ';//首尾加空格,
  transform(b.begin(),b.end(),b.begin(),::tolower);//小写化 用到了函数,方便,也可以采用遍历。 
  if(b.find(a)==-1)//b.find(a);这句代码的意思就是从b字符串中查找a字符串。find找不到会返回npos也就是-1 
  cout<<"-1";
  else
  { 
    int sum=0;int n=0;
    while(b.find(a,n)!=-1)//就是相当于查一个数子就加一次sum; 
    { 
      sum++;
      n=b.find(a,n)+1;//看到这里,你已经快成功, 后面的数字代表从什么位置开始查找。如果不加了、就是第一个字符开始查找
    }
    cout<<sum<<" ";
    cout<<b.find(a);//最后如果你听懂了,可以留下一个赞,不奢求收藏。
  }
}


相关文章
|
8月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
6月前
【洛谷】P1308 [NOIP2011 普及组] 统计单词数
然后要被查找的b字符串,可能会出现第二个样例中的情况,也就是字符串a是to,而字符串b的Ottoman,这样是不符合题意的。为了 解决这个问题,我们将字符串a首尾都加一个空格,同时将字符串b首尾都加一个空格(这里是为了让字符串b的首单词和尾单词前后均有空格)为了能持续找字符串b中的所有字符串a,我们用一个while循环,如果能找到,就每次从能找到的位置的下一个位置(也就是能找到的位置下标+1)开始找,并及时更新位置,同时计数。因为不区分大小写,所以可以将两个字符串a,b都转为小写(也可以都转为大写)。
159 10
【洛谷】P1308 [NOIP2011 普及组] 统计单词数
|
8月前
特别数的和(蓝桥杯)
特别数的和(蓝桥杯)
|
8月前
|
算法
算法编程(二十九):统计一致字符串的数目
算法编程(二十九):统计一致字符串的数目
90 0
|
算法
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
416 1
|
机器学习/深度学习
P1067 [NOIP2009 普及组] 多项式输出(模拟输出细节)
P1067 [NOIP2009 普及组] 多项式输出(模拟输出细节)
68 0
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
57 0
|
Rust 图计算
Rust每日一练(Leetday0014) 组合总和II、缺失正数、接雨水
Rust每日一练(Leetday0014) 组合总和II、缺失正数、接雨水
121 0
(模拟)(枚举)acwing蓝桥杯1245. 特别数的和
(模拟)(枚举)acwing蓝桥杯1245. 特别数的和
64 0