➰ 코딩 부트캠프/42 seoul

[0 Circle] Libft - ft_strnstr, ft_strncmp

 사과개발자 2020. 12. 24. 01:05

📌ft_strnstr

문자열 내에서 부분문자열을 탐색하는 함수

char *ft_strnstr(const char *str, const char *to_find, size_t n);

➕ 매개변수 (Parameters)

  • str : 문자열을 검색할 대상
  • to_find : 검색할 문자열
  • n : str의 n번째 문자까지만 확인

➕ 반환값 (Return)

  • char * : 문자열이 존재하면 해당 문자열이 존재하는 곳의 포인터를 반환, 존재하지 않으면 NULL 반환

➕ 설명 (Description)

➕ 코드 (Code)

 #include "libft.h" 

 int find_str(const char *str, const char *to_find, int n) 
 { 
     str += n; 

    while (*to_find) 
     { 
         if (*str != *to_find) 
             return (0); 
         str++; 
         to_find++; 
     } 

     return (1); 
 } 

 char *ft_strnstr(const char *str, const char *to_find, size_t n) 
 { 
     size_t  i; 

     i = 0; 

     if (!*to_find) 
         return ((char *)str); 

     if (!n) 
         return (0); 

     if (!*str) 
         return (0); 

     while ((str[i] != 0) && (i <= (n - ft_strlen(to_find)))) 
     { 
         if (find_str(str, to_find, i) == 1) 
             return ((char *)str + i); 
         i++; 
     } 

    return (0); 
 }

📌ft_strncmp

두 문자열을 n까지 비교

int            ft_strncmp(const char *str1, const char *str2, size_t n);

➕ 매개변수 (Parameters)

  • str1 : 비교할 첫번째 문자열
  • str2 : 비교할 두번째 문자열
  • n : str1과 str2의 n번째 문자까지만 비교

➕ 반환값 (Return)

  • int : str2가 str1보다 큰 경우 음수 / 작은 경우 양수 / 동일한 경우 0

➕ 설명 (Description)

➕ 코드 (Code)

#include "libft.h"

int            ft_strncmp(const char *str1, const char *str2, size_t n)
{
    size_t    i = 0;

    if (!n)
        return (0);

    while (str1[i] && str2[i] && str1[i] == str2[i] && i < (n - 1))
        i++;

    if (str1[i] == str2[i])
        return (0);

    return ((unsigned char)str1[i] - (unsigned char)str2[i]);
}
반응형