30分求助,看了下题解感觉差不多。。。
查看原帖
30分求助,看了下题解感觉差不多。。。
339861
我帅我骄傲楼主2021/10/7 16:59

在本地测试用例都过了,但是评测只有30分。去看了下题解感觉跟我这个差不多.....

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
string a,b;
int acount = 0;
int main(){
	getline(cin,a);
	getline(cin,b);
	for(int i=0;i<a.length();i++)
		a[i] = tolower(a[i]);
	for(int i=0;i<b.length();i++)
		b[i] = tolower(b[i]);
	string :: size_type pos;
	pos = b.find(a,0) ;
	bool flag = false;
	while(pos != b.npos){
		if((b[pos-1] == ' '||pos == 0)&& b[pos+a.length()] == ' '){
			flag = true;
			acount ++;	
		}
		pos = b.find(a,pos+a.length());
	}
	if(!flag) cout << -1;
	else{
		cout << acount << " ";
		pos = b.find_first_of(a); 
		cout << pos;
	}
	return 0;
}

题解长这个样子,此处感谢Aimyhtixela 大佬提供题解

//定义头文件
#include <iostream>
#include <string>
//命名空间
using namespace std;
int main(){
    //定义两个字符串
    string a;
    string b;
    //用string库,调用getline, 直接读入一整行
    getline(cin,a);
    getline(cin,b);
    //转换大小写,可以都转换为大写,或者小写
    for (int i=0;i<a.length();++i){
        a[i]=tolower(a[i]);
    }
    for (int i=0;i<b.length();++i){
        b[i]=tolower(b[i]);
    }
    //因为连起来的不算,所以要在前后加几个空格,一定要是同样多的,同量减同量,等于同量
    a=' '+a+' ';
    b=' '+b+' ';
    //先看看会不会找不到,用a.find()和string::npos
    if (b.find(a)==string::npos){
        cout<<-1<<endl;
    }
    //如果找得到
    else {
        int alpha=b.find(a);
        int beta=b.find(a),s=0;//计数器初始化为0
        while (beta!=string::npos){
            ++s;//计数器
            beta=b.find(a,beta+1);
        }
        cout<<s<<" "<<alpha<<endl;//输出第一个和总共有几个
    }
    //函数返回值为0,结束整个程序
    return 0;
}
2021/10/7 16:59
加载中...