文字列に特定の文字列がいくつ含まれているか検索したい

Last-modified: 2007-11-02 (金) 23:58:36

概要

 int XXX(string szX,string szY)という形で、szXにszYの文字列がいくつ含まれているかを、intで返す関数を作ってみます。
 文字列を配列に格納する(区切りは「,」)の場合、検索が','だけということもあり、加算方式でやってみましたが、今回はそれだと面倒なので、eraseとFindの削除方式で行きます。


//szXの中にszYがいくつあるか検出します
int STRING_WORD_NUM(string szX,string szY)
{
int szNum = szY.Length();
if(szX.Length() < szNum){return 0;}
int nNum = 0;
int nDel = szNum;
int nL = 0;
  for(;(nNum = szX.Find(szY)) != -1;nL++)
  {
     for(;nDel > 0;nDel--)
     {szX.Erase(nNum);}   nDel = szNum;
  }
return nL;
}

作ったら動かしましょう。


void game_main(void)

{
int nX = STRING_WORD_NUM("東京ガガガ","ガガガ");
N(nX);A;
}
//1と出力されます。

解説

  1. まず検索する文字列szYの長さを調べ、szNumに格納します。szYがszXより長い場合、これは確実にその文字列は無いのでreturn 0します。
  2. szXのどの位置にszYがあるかを取得するnNumを宣言します。erase用の文字数を取得するnDelを宣言します。szYがいくつあるかの個数を取っておくnLを宣言します。
  3. Findで-1(その文字列なし)が返るまで、forさせます。
  4. szYの文字列を見つけたら、その文字列だけszXからeraseを使って削除します。
  5. ループを繰り返し、szYの文字列がszXから完全に消えたら今まで消した数をリターンさせます。