C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

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:0CM:0

コメント
コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/46-fe6c66a2

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.