ft_strnstr 구현

yeonjkim·2021년 5월 24일
0

42seoul-libft

목록 보기
30/43

1. ft_strnstr 용도

* strr 문자열에서 len 길이까지 find문자열을 찾고, find문자열을 찾은 주소의 주소값을 반환하는 함수.
* 찾지 못했다면 NULL을 반환.

2. ft_strnstr 프로토타입

char	*ft_strnstr(const char *strr, const char *find, size_t len)
const char *strr : find 문자열을 찾을 문자열
const char *find : 검색될 문자열
size_t len : strr 문자열 내에서 find문자열을 탐색할 범위

3. 구현 시 유의사항

  • 반환 값이 (char *) 형이라는 것에 주의한다.

  • len범위까지 strr을 탐색했을 때 find문자열을 찾지 못했으면 NULL을 반환한다.

  • find문자열을 strr 문자열에서 찾았을 때는 strr에서 찾은 find문자열의 첫 글자를 가리키는 포인터를 리턴한다.

4. 코드 구현

#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);
}

5. 코드 구현 방법

(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()를 실행해 주면 된다.

0개의 댓글