strstr, strnstr 함수의 manual은 다음과 같다!


#include <string.h>
char *strstr(const char *haystack, const char *needle);
char *strnstr(const char *haystack, const char *needle, size_t len);
haystack: 검색할 대상이 되는 NULL로 종료된 문자열이다.needle : 찾고자 하는 NULL로 종료된 문자열이다.파라미터는 Finding a needle in a haystack 속담에서 유래한 거 같다.
strstr 함수는 haystack 문자열에서 needle 문자열이 처음으로 나타나는 위치를 찾아 그 위치의 포인터를 반환한다.
strnstr 함수는 strstr 함수와 유사하지만 len 길이 안에서 탐색을 진행한다는 점이 다르다.
needle이 빈 문자열일 경우, haystack을 반환한다.
needle 문자열이 haystack 내에서 발견되지 않으면 NULL을 반환한다.
그렇지 않으면 needle 문자열이 처음으로 나타나는 위치를 반환한다.
static int ft_strcmp(const char *s1, const char *s2)
{
while (*s1 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
return ((unsigned char)(*s1) - (unsigned char)(*s2));
}
char *ft_strstr(const char *haystack, const char *needle)
{
if (*needle == '\0')
return ((char *) haystack);
while (*haystack != '\0')
{
if (ft_strcmp(haystack, needle) == 0)
return ((char *)haystack);
haystack++;
}
return (NULL);
}
static size_t ft_strlen(const char *str)
{
const char *eos;
eos = str;
while (*eos != '\0')
eos++;
return (eos - str);
}
static int ft_strncmp(const char *s1, const char *s2, size_t n)
{
while (n > 0 && *s1 == *s2)
{
if (*s1 == '\0' && *s2 == '\0')
break ;
s1++;
s2++;
n--;
}
if (n == 0)
return (0);
return ((unsigned char)(*s1) - (unsigned char)(*s2));
}
char *ft_strnstr(const char *haystack, const char *needle, size_t len)
{
size_t idx;
size_t needle_len;
needle_len = ft_strlen(needle);
if (needle_len == 0)
return ((char *) haystack);
else if (needle_len > len)
return (NULL);
idx = 0;
while (*haystack != '\0' && idx + needle_len <= len)
{
if (ft_strncmp(haystack, needle, needle_len) == 0)
return ((char *) haystack);
haystack++;
idx++;
}
return (NULL);
}