洛谷OJ-P 1308統計単語数-文字列マッチング-string


タイトルURL:https://www.luogu.org/problem/show?pid=1308
タイトルの説明
一般的なテキストエディタには、特定の単語が文章の中にある場所をすばやく特定したり、特定の単語が文章に現れる回数を統計したりする単語を検索する機能があります.
今、この機能をプログラミングして実装してください.具体的な要求は、単語を指定し、指定した文章に現れた回数と最初に現れた位置を出力してください.注意:単語を一致させる場合は、大文字と小文字を区別しませんが、完全な一致が必要です.すなわち、指定された単語は、文章の独立した単語と大文字と小文字を区別しない場合と完全に同じでなければなりません(サンプル1を参照).指定された単語が文章の一部である場合は一致しません(サンプル2を参照).
にゅうしゅつりょくけいしき
入力形式:
ファイル名stat.in、2行を入力します.
第1の動作は、アルファベットのみを含み、所与の単語を表す文字列である.
2番目の動作は、指定された文章を表すアルファベットとスペースのみを含む文字列です.
出力フォーマット:
出力ファイル名はstat.outです.
1行のみで、文章に所与の単語が見つかった場合、2つの整数を出力し、2つの整数の間に1つのスペースで区切られ、それぞれ単語が文章に現れた回数と最初に現れた位置(つまり、文章に最初に現れたとき、単語の頭文字が文章の中の位置で、位置は0から始まる)である.単語が文章に現れない場合は、整数-1を直接出力します.
入出力サンプル
サンプル#1を入力:
To to be or not to be is a question
出力サンプル#1:
2 0
サンプル#2を入力:
to Did the Ottoman Empire lose its power at that time
出力サンプル#2:
-1
説明
データ範囲
1≦単語長≦10.
1≦文章長≦1000000.
noip 2011普及グループ第2題
考え方:
c++のstringの文字列で1を比較する.すべての大文字を小文字にする.2つのスペースの間のサブストリングを探します.文字列を比較し、等しい場合は、その単語が段落に現れる位置を格納し、1回の単語の出現回数を増やす.4.出力.
using namespace std;
string st,st1,st2,st3;
int f,p=-1,p1,s,s1,s2,len;//p                      
int main()
{
    getline(cin,st);      
    getline(cin,st1);//         ,cin        
    st1=st1+' ';//      
    len=st1.size();
    for (int i=0;iif (st[i]>='A'&&st[i]<='Z') st[i]=st[i]+32;
    for (int i=0;iif (st1[i]>='A'&&st1[i]<='Z') st1[i]=st1[i]+32;//    
    for (int i=0;;i++)
    {
        p1=st1.find(' ',p+1);//       
        st2=st1.substr(p+1,p1-(p+1));//            
        if (st==st2) {if (s==0) s1=p+1;s++;}     //                  
        p=p1;//        p
        if (p==-1) break;//    ,          ,p p1   -1,        
    }
    if (s==0) cout<1;else cout<" "<//    
}