洛谷P1308 统计单词数

这题很简单,不知道为什么有人不会做

都在代码里面标出来了,不用我多说

就是搜索加判断,不需要捏太长

我写的有点多但还算是易懂

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<string>
using namespace std;
string a,b;//字符串 
int ans=0;int aaa=-1;//ans是答案 aaa是最早的字符哪里开始
int main(){
    getline(cin,a);//直接cin碰到‘ ’(空格)就没了 
    getline(cin,b);
    int n=b.size();//求字符串长度 
    for(int i=0;i<=n-1;i++){//运行,字符串a要是有大写就变小写(+32) 
        if(b[i]>='A' && b[i]<='Z')b[i]+=32;
    }
    int yy=a.size();
    for(int i=0;i<=yy-1;i++){//同上 
        if(a[i]>='A' && a[i]<='Z')a[i]+=32;
    }
    for(int i=0;i<=n-1;i++){//cout<<b[i]<<" "<<a[0]<<" "; 检查 
        if(b[i]==a[0]){//假若碰到开头 
            int u=i,l=0;
            for(int j=0;j<=yy-1;j++,u++){//cout<<endl<<endl<<b[u]<<" "<<a[j]<<" \n\n\n"; 检查 
                if(b[u]==a[j])l++;
            }//cout<<l<<" "<<yy<<" "; 检查 
            if(l==yy && (b[i-1]==' ' || i-1==-1) && (b[i+yy]==' ' || i+yy>n-1)){//前面和后面是空格或者碰到边,就是表达这是一个单纯的单词而不是包含的,如输入a为‘to’,那么‘to’是而‘noto’不是 
            ans++;if(aaa==-1)aaa=i;}
        }
    }
    if(ans!=0)cout<<ans<<" "<<aaa;
    else cout<<"-1";//cout<<n; 检查 ans等于0就输出-1,就是按题目要求 
    return 0;
}

 

posted @ 2017-04-19 21:31  themanintheworldisme  阅读(143)  评论(0)    收藏  举报