P1308(字符串类,处理字符串查找)

时间:2019-09-16
本文章向大家介绍P1308(字符串类,处理字符串查找),主要包括P1308(字符串类,处理字符串查找)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目描述

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

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

输入格式

22行。

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

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

输出格式

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

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<cctype>
 5 using namespace std;
 6 int main(){
 7     int cal1=0;
 8     string::size_type cal2;
 9     string::size_type tmp;
10     string letter,paragraph;
11     getline(cin,letter);
12     getline(cin,paragraph);
13     letter=' '+letter+' ';
14     for(auto &ch:letter){
15             ch=tolower(ch);
16     }
17     paragraph=' '+paragraph+' ';
18     for(auto &ch:paragraph){
19             ch=tolower(ch);
20     }
21     if((paragraph.find(letter))!=string::npos){
22         cal2=paragraph.find(letter);
23     }else{
24         cout<<-1;
25         return 0;
26     }
27     tmp=0;
28     while((paragraph.find(letter,tmp))!=string::npos){
29         tmp=paragraph.find(letter,tmp);
30         tmp+=letter.length()-1;
31         cal1++;
32     }    
33         cout<<cal1<<" "<<cal2;
34     
35 } 

字符串的输入直接getline(cin,str);(并无必要判断是否是无效输入)

本题使用find(str,pos)函数进行处理,千万记得:每次查找一遍后要刷新pos值,使其定位到string的新开头处

原文地址:https://www.cnblogs.com/hfut-freshguy/p/11529891.html