1 条题解

  • 0
    @ 2025-8-24 22:42:56

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Milthm
    ?

    搬运于2025-08-24 22:42:56,当前版本为作者最后更新于2022-11-10 19:23:10,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    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);
    

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

    那么附上完整代码:

    #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;
    }
    
    • 1

    信息

    ID
    6598
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者