● 関数リファレンス

文字の検索

    char * __stdcall   StrCalc_search_char(char *psearch,char *pchar);

引数

引数名意味
psearch検索開始アドレス
pchar末尾ヌルの検索対象文字群

戻り値

発見した文字の位置を返します。
発見できなかった場合は末尾ヌルの位置を返します。

説明

psearch で指定した文字列から、pchar 内の何れかの文字が出現する位置を検索します。

pchar には検索対象の文字を文字列の形で指定します。
例えば、イコールのみを検索する場合は、

    pret = StrCalc_search_char(psearch,"=");

コロン、アットマーク、ダラーを検索する場合は、

    pret = StrCalc_search_char(psearch,":@$");

記述の順序は処理に影響しません。なお、全角文字は検索できません。

検索文字列内にある、シングルクォートやダブルクォート、丸括弧で括られた範囲は検索しません。また、シングルクォート、ダブルクォート、丸括弧自体を検索対象とする事はできません。
ダブルクォートの範囲は S-JIS に対応していますが、エスケープシーケンスには対応していません。

検索はヌル文字が出現するまで続けられます。文字を発見した場合は、その位置を返して終了します。発見できなかった場合は、末尾ヌルの位置を返し終了します。

検索から除外する範囲


a.

              検索しない範囲
              ↓         ↓
      123 + ( 223 )  + " 323 "
     ↑
  開始位置                走査方向 →

括弧の場合は、開始括弧 ( を +1 カウント 、終了括弧 ) を -1 と考え、そのカウントが 0 の時の領域にある文字列が検索対象になります(開始位置の階層が検索対象)。

b-1.

            1           0
      123 + ( 223 + 323 ) - 423
     ↑
  開始位置

b-2.

      1       2           1      0
      ( 123 + ( 223  + 323) - 423) - 523
     ↑
  開始位置

b-3.

         -1         0
      123 ) + 223 - ( 323 )
     ↑
  開始位置

ダブルクォートの場合も、同じようにカウントで考える事ができますが、文字の種類ではなく、発見した回数により ±1 が変わる点が、括弧の場合と異なります。

c.

          1     0     1     0
      123 " 223 " 323 " 423 "
     ↑
  開始位置

このため、ダブルクォートでの括りは、入れ子にはなりません。

開始位置によっては、期待する結果にならない事があるので、注意する必要があります。
終了位置が事前に判る場合は、対象範囲を別のバッファにコピーするか、終了位置にヌル文字を入れる事で、安全に検索を行う事ができます。