欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【洛谷】P1308 统计单词数-全AC题解(易理解

程序员文章站 2023-08-30 10:06:21
弟弟的混乱代码(易理解 大概 思路: 循环b(被找的字符串),遇空格比较两空格间的长度是否与a(需要查找的字符)相等;不相等继续循环;相等比较内容是否相同(倒数比较,不一样直接退出 ,直到比较到第一个都相等时 num++)。 ......

弟弟的混乱代码(易理解 大概

 

思路: 循环b(被找的字符串),遇空格比较两空格间的长度是否与a(需要查找的字符)相等;不相等继续循环;相等比较内容是否相同(倒数比较,不一样直接退出 ,直到比较到第一个都相等时 num++)。

 

#include <iostream>
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
​
int main()
{
    string a;//找
    string b;//被找
    getline(cin,a);
    getline(cin,b);
    int lena = a.length();
    int lenb = b.length();
    int k = -1;//上一个空格位置
    int perlenb = 0;//每一个长度
    int num = 0;
    int first = -1;
​
​
    for(int i=0;i<lena;i++)
        if(a[i]>='a' && a[i]<='z')
            a[i]+=32;
    for(int j=0;j<lenb;j++)
        if(b[j]>='a' && b[j]<='z')
            b[j]+=32;
​
//大小写转换完成
​
​
    for(int i=0;i<lenb;i++)
    {
        if(i==0 && b[i]==' ') {i++;k++;}
        if(b[i]==' ')
        {
            perlenb = i-k-1;
​
            if(lena==perlenb)
            {
                for(int j=lena-1;j>=0;j--)
                {
                    if(a[j]!=b[i+j-lena])
                        break;
                    else if(j==0)
                    {
                        num++;if(first<0){first=i-lena;}
                    }
​
                }
            }
            k=i;
        }
        if(i==lenb-1)
        {
            if(lena==perlenb)
            {
                for(int j=lena-1;j>=0;j--)
                {
                    if(a[j]!=b[i+j-lena])
                        break;
                    num++;if(first<0){first=i-lena;}
                }
            }
            k=i;
        }
    }
    if(first==-1) cout<<first<<endl;
    else cout<<num<<" "<<first<<endl;
    return 0;
}
​