|
|
|
| 2008/10/07 11:45||▲
|
|
|
strrchr関数は、strchr関数と似ていますが、指定した文字が最後に現れた位置を返します。逆方向に探索を行ってもよいのですが、それでは、少なくとも文字列を2回走査しないといけないので、順方向に探索し、指定した文字が現れた時点で変数を上書きしていく方法を採ります。
#include <stddef.h>
char *strrchr(const char *s, int c) { char *result = NULL; c = (char)c; do if (*s == c) result = (char*)s; while (*s++ != '\0'); return result; }
ほとんどstrchr関数と変わりませんが、文字が見つかった時点で即終了するのではなく、いったんresultに格納して、ループを続行しています。
strrchr関数は、strchr関数と同様、C++では以下の2種類の形式が多重定義されています。
char* strrchr(char* s, int c); const char* strrchr(const char* s, int c);
外部定義されたstrrchr関数のコードはCで記述することになりますから、上記のいずれとも合致しないわけですが、C結合にしてしまえば、この程度の型の違いは無視できます(この辺りの事情はstrchr関数と同じです)。したがって、
extern "C" char* strrchr(char*, int);
inline const char* strrchr(const char* __s, int __c) { return strrchr(const_cast(__s), __c); }
とすればOKです。
|
| 2006/04/14 00:40|文字列操作|TB:0|CM:0|▲
|
|
|
コメント
|
|
コメントの投稿
|
|
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/43-7f9b6400
|
|
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|