参考洛谷题解,
思路如下:
同getline吸取空格,输入b
保证单词是以空格开头和空格结尾
为确保开头结尾都是空格,所以将每个字符串都加上“ ”
因为大小写不影响所以将所有都转化为小写
transform(a.begin(), a.end(), a.begin(), ::tolower);
string text = "Hello, World!"; // 将字符串 text 转换为大写 for (char &c : text) { c = toupper(c); }
然后利用find寻找对应(如果没找到会返回-1)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string a, b;
getline(cin, a);
a = ' '+a+' '; // 在 a 的末尾加一个空格,方便判断完全匹
getline(cin, b);
b =' '+b+' '; // 在 b 的开头加一个空格,方便判断完全匹配
// 将 a 和 b 转换为小写
transform(a.begin(), a.end(), a.begin(), ::tolower);
transform(b.begin(), b.end(), b.begin(), ::tolower);
int sum = 0; // 查找次数
int first_pos = -1; // 第一次匹配的位置
int n = 0; // 当前查找的起始位置
if(b.find(a)==-1) cout<<-1<<endl;
else{
int x = b.find(a);
int sum = 0,h=b.find(a);
while(h != -1){
sum++;
h = b.find(a,h+1);
}
cout<<sum<<" "<<x<<endl;
}
return 0;
}