● 関数リファレンス
文字の検索
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 "
↑
開始位置
このため、ダブルクォートでの括りは、入れ子にはなりません。
開始位置によっては、期待する結果にならない事があるので、注意する必要があります。
終了位置が事前に判る場合は、対象範囲を別のバッファにコピーするか、終了位置にヌル文字を入れる事で、安全に検索を行う事ができます。