* strr 문자열에서 len 길이까지 find문자열을 찾고, find문자열을 찾은 주소의 주소값을 반환하는 함수.
* 찾지 못했다면 NULL을 반환.
char *ft_strnstr(const char *strr, const char *find, size_t len)
const char *strr : find 문자열을 찾을 문자열
const char *find : 검색될 문자열
size_t len : strr 문자열 내에서 find문자열을 탐색할 범위
반환 값이 (char *) 형이라는 것에 주의한다.
len범위까지 strr을 탐색했을 때 find문자열을 찾지 못했으면 NULL을 반환한다.
find문자열을 strr 문자열에서 찾았을 때는 strr에서 찾은 find문자열의 첫 글자를 가리키는 포인터를 리턴한다.
#include "libft.h"
static int ft_find(char *str, const char *find, size_t len, size_t strindex)
{
size_t index;
index = 0;
while (find[index] != '\0')
{
if (strindex >= len)
{
return (0);
}
if (find[index] != str[strindex])
{
return (0);
}
strindex++;
index++;
}
return (1);
}
char *ft_strnstr(const char *strr, const char *find, size_t len)
{
size_t strindex;
char *str;
str = (char*)(strr);
strindex = 0;
if (*find == 0)
return (str);
while (str[strindex] != '\0')
{
if (ft_find(str, find, len, strindex) == 0)
{
strindex++;
}
else if (ft_find(str, find, len, strindex) == 1)
{
return (&str[strindex]);
}
}
return (NULL);
}
(1) strr을 char *로 형변환하는 str변수 선언.
(2) find가 비어 있으면 str의 첫 주소값 리턴.
(3) str[strindex]가 '\0'이 아닐 때까지 ft_find()를 호출한다.
(4) ft_find()함수는 find가 '\0'이 아닐 때까지 str과 비교하는 함수이다.
(5) 만약 index가 len보다 작거나 한 글자라도 다르면 0을 리턴하고, 모두 같으면 1을 리턴한다.
(6) 1이 나왔다면, str[index]의 주소를 반환하고, 0이 나왔다면 strindex++을 해 주며 str의 각 요소마다 ft_find()를 실행해 주면 된다.