题目描述:
一、思路
易知,首先需要读入两个字符串变量,分别具有不同的意义。
可以使用find函数来进行查找,也可以一个字符一个字符地进行比较。
string a;
cin>>a;
getchar();
string s;
getline(cin,s);
同时,需要注意在输入下一个字符时的回车的填充。
二、注意点
不一样的大小写比较时,要提前改变成相同的大小写。
短字符在长字符里面比较时,因为存在空格和可能并不是单独一个单词的缘故,所以需要提前进行转变。
for(int i=0;i<a.size();i++)
{
a[i]=tolower(a[i]);
}
a=" "+a+" ";
for(int i=0;i<s.size();i++)
{
s[i]=tolower(s[i]);
}
s=" "+s+" ";
三、代码实现
使用find函数进行获知总次数和第一次存在的位置。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main(void)
{
string a;
cin>>a;
getchar();
string s;
getline(cin,s);
for(int i=0;i<a.size();i++)
{
a[i]=tolower(a[i]);//把大写转换成小写
}
a=" "+a+" ";
for(int i=0;i<s.size();i++)
{
s[i]=tolower(s[i]); //把大写转换成小写
}
s=" "+s+" ";
int cnt=0,res=0;//分别进行计数
for(int i=0;i<s.size();i++)
{
if(s[i]==a[0])
{
bool f=false;
for(int j=1,k=i+1;j<a.size();j++,k++)
{
if(a[j]!=s[k])
{
f=true;
break;
}
}
if(!f&&cnt==0)
{
res=i;//记录首先匹配的位置
}
if(!f)
{
cnt++;
}
else{
f=false;//恢复逻辑变量的值
}
}
}
if(cnt==0)
{
cout<<"-1"<<endl;
}
else{
cout<<cnt<<" "<<res<<endl;
}
return 0;
}