这道题坑点很多…但可以学的也很多,尤其是string的find方法很丰富、很好用。
题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
输入格式
共2行。
第1行为一个字符串,其中只含字母,表示给定单词;
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式
一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s1,s2;
getline(cin,s1);
getline(cin,s2);
s1=" "+s1+" ";//一个单词的前后必有空格,防止出现该一个单词中有部分所找单词
s2=" "+s2+" ";
for(int i=0;i<s1.length();i++)
{
if(s1[i]>='A'&&s1[i]<='Z')
s1[i]+=32;
}
for(int i=0;i<s2.length();i++)
{
if(s2[i]>='A'&&s2[i]<='Z')
s2[i]+=32;
}
if(s2.find(s1)==string::npos)
cout<<-1;
else
{
int fir = s2.find(s1);
int son = s2.find(s1);
int cnt=0;
while(son!=string::npos)
{
++cnt;
son=s2.find(s1,son+1);//find的向后找该字符串的方式
}
cout<<cnt<<" "<<fir;
}
}