Dia Egg - Shugo Chara

C

strnstr 함수의 구현

별ㅇI 2023. 10. 17. 18:10
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