|
|
|
| 2008/10/07 11:44||▲
|
|
|
<string.h>ヘッダの関数が続いていますが、この辺で少しピッチを上げて、次のヘッダに早く移りたいと思います。
今回は、strcspn関数ですが、前回のstrpbrk関数とやっていることは大差ありません。strpbrk関数は、文字列の中から指定した文字群に含まれる文字を探し、最初に見つかった位置を返しますが、strcspn関数は、指定した文字群以外から構成される先頭部分の長さを求めます。つまり、指定した文字郡に含まれる文字が最初に現れた位置の添え字を返すことになります。
それでは実装です。
#include <stddef.h>
size_t strcspn(const char *s1, const char *s2) { register const char *ss1 = s1; for (register int c; (c = *ss1) != '\0'; ss1++) for (register const char *ss2 = s2; *ss2 != '\0'; ss2++) if (c == *ss2) goto quit; quit: return ss1 - s1; }
s1の値を文字する必要があるため、いったんss1で受けてはいますが、それ以外はstrpbrk関数とほぼ同じです。後は、返却値が異なるので、return文の式が変わっています。ループからの脱出は、直接returnで抜けてもよいのですが、それは結局、コンパイル時の最適化でreturn ss1 - s1;のところに分岐することを期待しているので、だったら、最初からgotoで記述することにしました。
|
| 2006/05/03 11:35|文字列操作|TB:0|CM:0|▲
|
|
|
コメント
|
|
コメントの投稿
|
|
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/46-fe6c66a2
|
|
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|