luoguパート1.3単語数を数える(文字列ベース)

P1308 [NOIP2011人気グループ]単語数を数える

展開
タイトル説明を
一般のテキストエディタは、すぐに記事に特定の単語の位置を特定することができます単語検索機能を、持っている、といくつかは、特定の単語が記事に表示された回数をカウントすることができます。

さて、この機能を実現するためにプログラムしてください。具体的な要件は次のとおりです。単語が与えられた場合、その単語が特定の記事に出現する回数と最初に出現する位置を出力してください。注:単語を照合する場合、大文字と小文字は区別されませんが、完全に一致する必要があります。つまり、指定された単語は、大文字と小文字を区別せずに、記事内の独立した単語と完全に同じである必要があります(例1を参照)。単語が指定されている記事内の単語の一部のみが一致とは見なされません(例2を参照)。

入力形式は
合計22行です。

11行目は文字のみを含む文字列で、特定の単語を示します。

22行目は文字列であり、特定の記事を示す文字とスペースのみを含めることができます。

出力形式は
1行です。記事内で特定の単語が見つかった場合、その単語が記事に表示される回数と最初の位置である2つの整数の間のスペースで区切られた2つの整数が出力されます。オカレンス(つまり、記事内で最初に表示されたとき、00から始まる記事内の単語の最初の文字の位置)。単語が記事内に表示されない場合は、整数-1-1を直接出力します。

入力と出力のサンプル
入力#1コピー
する
ことにするかではないが問題である
出力#1コピー
2 0

入力#2コピー

てオスマン帝国はその時に力を失った
出力#2コピー
-1

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main() {
    
    
	string s, s0;
	cin >> s0;
	getchar();
	for (int i = 0; i < s0.size(); i++){
    
    
		if (s0[i] <= 'Z' && s0[i] >= 'A')s0[i]+='a' - 'A';
	}
	getline(cin, s);
	for (int i = 0; i < s.size(); i++){
    
    
			if (s[i] <= 'Z' && s[i] >= 'A')s[i]+='a' - 'A';
		}
		s=' '+s+' ';//避免样例二
		s0=' '+s0+' ';
	if(s.find(s0)==string::npos){
    
    
		cout<<-1<<endl;
	}
	else {
    
    
		int a=s.find(s0);
		int b=a,t=0;
		while(b!=string ::npos){
    
    //string::npos
			t++;
			b=s.find(s0,b+1);
		}
		cout<<t<<" "<<a<<endl;
	}

	return 0;

}

おすすめ

転載: blog.csdn.net/Minelois/article/details/113763705