728x90
반응형
strnstr 함수
- string.h 헤더 파일에 포함되어있는 함수
- 원형은 char *strnstr(const char *haystack, const char *needle, size_t len)을 따른다.
- 문자열 haystack에서 길이 len 안에 문자열 needle이 있는지를 검사하는 함수이다. 즉 문자열안에서 문자열을 찾는것이다.
- 대소문자는 고려한다.
- 찾는다면 찾은 지점의 첫번째 포인터 값을 반환하고 못찾았다면 NULL을 반환한다.
- 찾아야하는 문자열이 빈 문자열이라면 haystack에서 받아온것을 그대로 반환해준다. ('\0')
strnstr 함수의 구현
static int checkstr(const char *haystack, const char *needle, size_t i)
{
size_t count;
count = 0;
while (needle[count] != '\0' && haystack[i] != '\0')
{
if (haystack[i] != needle[count])
return (1);
i++;
count++;
}
if (needle[count] == '\0')
return (0);
return (1);
}
char *ft_strnstr(const char *haystack, const char *needle, size_t len)
{
size_t i;
i = 0;
if (needle[0] == '\0')
return ((char *)haystack);
if (len < 0)
return (0);
if (haystack[0] == '\0')
return (0);
while (i + ft_strlen(needle) - 1 < len)
{
if (haystack[i] == needle[0])
if (checkstr(haystack, needle, i) == 0)
return (&((char *)haystack)[i]);
i++;
}
return (0);
}
// #include <stdio.h>
// #include <string.h>
// int main(void)
// {
// char *haystack = "123456123";
// char *needle = "456";
// char *needle2 = "";
// char *needle3 = "56789";
// printf("\ntest1 : strnstr : %s", strnstr(haystack, needle, 20));
// printf("\ntest1 : ft_strnstr : %s", ft_strnstr(haystack, needle, 20));
// printf("\ntest2 : strnstr : %s", strnstr(haystack, needle2, 20));
// printf("\ntest2 : ft_strnstr : %s", ft_strnstr(haystack, needle2, 20));
// printf("\ntest3 : strnstr : %s", strnstr(haystack, needle3, 20));
// printf("\ntest3 : ft_strnstr : %s", ft_strnstr(haystack, needle3, 20));
// printf("\ntest4 : strnstr : %s", strnstr("", "coucou", -1));
// printf("\ntest4 : ft_strnstr : %s", ft_strnstr("", "coucou", -1));
// }
728x90
반응형
'C' 카테고리의 다른 글
strdup 함수의 구현 (0) | 2023.10.21 |
---|---|
calloc 함수 구현 (0) | 2023.10.21 |
memcmp 함수의 구현 (2) | 2023.10.17 |
memchr 함수의 구현 (mem함수와 str함수의 차이) (0) | 2023.10.16 |
strncmp 함수의 구현 (2) | 2023.10.16 |