|
strstr
|
探索関数
strstr
|
ヘッダ
| #include <string.h>
|
形 式
| char *strstr(const char *s1, const char *s2);
|
機 能
| s1が指す文字列の中で最も先頭側に出現する、s2が指す文字列と同じ文字の並び(ナル文字は含まない)を探す。
|
返却値
| 探し出した文字の並びの先頭文字へのポインタを返し、見つからなかった場合は、空ポインタを返す。s2が長さ0の文字列であればs1を返す。
|
■実装例A■
#include <string.h>
char *strstr(const char *s1, const char *s2)
{
if (*s2 == '\0') return ((char *)s1); /* s2は空文字列 */
for ( ; (s1 = strchr(s1, *s2)) != NULL; ++s1) { /* strchrを利用 */
const char *sc1 = s1;
const char *sc2 = s2;
do {
if (*++sc2 == '\0')
return ((char *)s1);
} while (*++sc1 == sc2);
}
return (NULL);
}
■実装例B■
#include <string.h>
char *strstr(const char *s1, const char *s2)
{
const char *p1 = s1;
const char *p2 = s2;
while (*p1 && *p2) {
if (*p1 == *p2) {
p1++;
p2++;
} else {
p1 -= p2 - s2 - 1;
p2 = s2;
}
}
return (*p2 ? NULL : (char *)(p1 - (p2 - s2)));
}