1 条题解

  • 1
    @ 2022-09-26 22:29:15
    #include<bits/stdc++.h>
    using namespace std;
    string all,one;
    int pos=0,cnt=0,memory;
    string work(string str)
    {
        int len=str.size();
        for(int i=0;i<len;i++)
            str[i]=(str[i]>='A'&&str[i]<='Z')?str[i]+32:str[i];//统一转换为小写字母,方便判断
        return str;
    }
    string inputs()
    {
        string ls;
        getline(cin,ls);
        return " "+work(ls)+" ";//前后加上空格
    }
    int main()
    {
        one=inputs();//给定单词
        all=inputs();//给定句子
        pos=all.find(one,pos);//找它的次数:C++里附带的函数
        /*
        string中find()返回值是字母在母串中的位置(下标记录),
        如果没有找到,那么会返回一个特别的标记 npos,也就是 -1。
        */
        if (pos==-1)//所以,没找到,输出 -1,结束
        {
            cout<<pos<<endl;
            return 0;
        }
        else//否则开始判断
        {
            memory=pos;//第一次出现位置记录
            cnt++;//次数 ++
            pos+=one.size()-1;//有种尺取的意思,往后挪一个单位
        }
        while(pos<all.size())//只要未到头
        {
            pos=all.find(one,pos);
            if(pos==-1)//一旦到头,退出
                break;
            else
            {
                cnt++;//次数 ++
                pos+=one.size()-1;//往后挪一个单位
            }
        }
        cout<<cnt<<" "<<memory<<endl;//输出次数及第一次的位置
        return 0;
    }
    
  • 1

[NOIP2011 普及组] 统计单词数

信息

ID
1312
难度
5
分类
(无)
标签
递交数
4
已通过
1
通过率
25%
上传者