P8835 题解

· · 题解

P8835 题解

让我们看看这题,然后我们敏锐的察觉到这里有一个“相同字符不区分大小写”,那好我们先转换:


string b_sm(string s){//大写转小写,反过来也可以
    int l=s.size();
    for(int i=0;i<l;i++){
        if(s[i]>='A'&&s[i]<='Z')s[i]+=32;//如果是大写字母就转换为小写
    }
    return s;//返回处理好的字符串
}

接下来是最关键的判断子串了,接下来给大家介绍一个函数:

s.substr(start,num);

这个函数的作用是从 start 开始截取 num 个字符。用它我们就可以轻松的判断子串啦!

那么附上完整代码:

#include<iostream>
using namespace std;
int t,n,m,ans;
string b_sm(string s){//刚才的函数
    int l=s.size();
    for(int i=0;i<l;i++){
        if(s[i]>='A'&&s[i]<='Z')s[i]+=32;
    }
    return s;
}
string s1,s2;//题目中的A和B
int main(){
    cin>>t;
    while(t--){
        ans=0;
        cin>>n>>m>>s1>>s2;//输入
        s1=b_sm(s1);s2=b_sm(s2);
        int l2=s2.size(),l1=s1.size();
        for(int i=0;i<l2;i++){
            if(s2.substr(i,l1)==s1)ans++;//截取,如果是就把答案增加
        }
        cout<<ans<<endl;//输出答案
    }
    return 0;
}