P1308(字符串类,处理字符串查找)
Posted hfut-freshguy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的新开头处
以上是关于P1308(字符串类,处理字符串查找)的主要内容,如果未能解决你的问题,请参考以下文章