문제
문자열 haystack에 길이 len 이내에 needle이 있는지 검사하는 함수.
찾았다면, 찾은 지점의 pointer를 반환
구현
- haystack을 반복문으로 돌린다.
- haystack[i]가 needle[0]과 같다면,
- haystack[i + temp]가 needle[temp]와 같은지 확인
- 하나라도 같지 않으면 다음으로 넘어간다.
- i + temp가 주어진 길이를 초과하는지도 확인
- 주어진 길이를 초과할 경우, 조심해야 한다.
- 만약 needle[temp]까지 다 맞다면, haystack[i]의 주소를 반환한다.
- haystack[i + temp]가 needle[temp]와 같은지 확인
- 아무리 해도 같은 것이 없다면,
(void *)0반환
주의할 점
- needle이 공백이 경우를 생각해야 한다.
- 또, 길이가 0인 경우도 생각해야 한다.
코드
c
#include "libft.h"
char *ft_strnstr(const char *haystack, const char *needle, size_t len)
{
size_t i;
size_t tmp;
i = 0;
if (needle[0] == '\0')
return(&((char *)haystack)[0]);
while (haystack[i] && i < len)
{
tmp = 0;
if (needle[tmp] == '\0')
return (&((char *)haystack)[i]);
if (haystack[i + tmp] == needle[tmp])
{
while (haystack[i + tmp] && needle[tmp])
{
if (needle[tmp] != haystack[i + tmp])
break ;
else if (i + tmp >= len)
break ;
tmp++;
}
if (needle[tmp] == '\0')
return (&((char *)haystack)[i]);
}
i++;
}
return (NULL);
}