该题新的知识点:string::npos表示string容器的find函数找不到匹配时返回的值
解题主要思路:由于题意要找的目标子串是独立的一个单词,可以看做左右都是空格的原子串,因此可以在子串前后都加一个空格,由于可能存在子串在主串中是第一个单词或者最后一个单词,所以要把主串前后也加上空格,下面上代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
string s1,s2;
cin>>s1;
getchar(); //吸收换行
getline(cin,s2);
//把子串和主串都转化为小写字符
for(int i=0;i<s1.size();i++){
if(s1[i]>='A'&&s1[i]<='Z')
s1[i]+=32;
}
for(int i=0;i<s2.size();i++){
if(s2[i]>='A'&&s2[i]<='Z')
s2[i]+=32;
}
//给子串和主串前后都加上空格
s1=" "+s1+" ";
s2=" "+s2+" ";
//查找子串在主串中出现的次数
int cnt=0,j=0;
while(s2.find(s1,j)!=string::npos){
cnt++;
j=s2.find(s1,j);
j++;
}
if(s2.find(s1)==string::npos)cout<<-1;
else{
cout<<cnt<<' '<<s2.find(s1);
}
return 0;
}