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