Libft Part1 (2/2)
13. strnstr
함수이름
- ft_strnstr
프로토타입
- char *ft_strnstr(const char *big, const char *little, size_t len)
매개변수
-const char *big : 전체 문자열
-const char *little : 문자열 big에서 찾을 문자열
-size_t len : 검색할 범위
리턴값
- 문자열 little값이 없다면 big 리턴
- big문자열 내에서 문자열 little을 찾지 못했다면 NULL 리턴
- little문자열을 찾으면 찾은 시작주소 리턴
설명
- big 문자열에서 little문자열을 len 사이즈 만큼 찾는다.
#include "libft.h"
char *ft_strnstr(const char *big, const char *little, size_t len)
{
size_t i;
size_t j;
size_t little_len;
i = 0;
j = 0;
little_len = ft_strlen(little);
if (*little == '\0')
return ((char *)big);
while (big[i] && len-- >= little_len)
{
j = 0;
while (big[i + j] == little[j] && little[j])
{
j++;
if (little[j] == '\0')
return ((char *)(big + i));
}
i++;
}
return (NULL);
}
14. strncmp
함수이름
- ft_strncmp
프로토타입
- int ft_strncmp(const char *s1, const char *s2, size_t n)
매개변수
-const char *s1 : 대상 문자열
-const char *s2 : 대상 문자열
-size_t n : 비교할 문자 개수
리턴값
- s1 > s2 : 양수
- s1 < s2 : 음수
- s1 == s2 : 0
설명
- 문자열 s1과 문자열 s2를 n개만큼 비교한다.
#include "libft.h"
int ft_strncmp(const char *s1, const char *s2, size_t n)
{
size_t len;
unsigned char *ss1;
unsigned char *ss2;
len = 0;
ss1 = (unsigned char *)s1;
ss2 = (unsigned char *)s2;
while ((ss1[len] || ss2[len]) && len < n)
{
if (ss1[len] > ss2[len])
return (ss1[len] - ss2[len]);
else if (ss1[len] < ss2[len])
return (ss1[len] - ss2[len]);
len++;
}
return (0);
}
15. atoi
함수이름
- ft_atoi
프로토타입
- int ft_atoi(char *str)
매개변수
- char *str : 변환할 문자열
리턴값
- 변환된 정수
설명
- 문자열을 정수로 변환해준다
#include "libft.h"
int is_whitespace(char c)
{
if (c == ' ' || c == '\n' || c == '\t' || c == '\v'
|| c == '\f' || c == '\r')
return (1);
else
return (0);
}
int is_operator(char c)
{
if (c == '+' || c == '-')
return (1);
else
return (0);
}
int ft_atoi(char *str)
{
size_t n;
int minus;
int i;
n = 0;
minus = 1;
i = 0;
while (str[i] && is_whitespace(str[i]))
i++;
if (str[i] == '-')
minus *= -1;
if (is_operator(str[i]))
i++;
while (str[i] && ft_isdigit(str[i]))
{
n *= 10;
n += (str[i] - '0');
i++;
}
return (n * minus);
}
16. isalpha
함수이름
- ft_isalpha
프로토타입
- int ft_isalpha(int c)
매개변수
-int c : 문자 하나
리턴값
- 매개변수 c 가 알파벳이면 1을, 아니라면 0을 리턴
설명
- 해당 문자가 알파벳인지 확인하는 함수
int ft_isalpha(int c)
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
return (1);
else
return (0);
}
17. isdigit
함수이름
- ft_isdigit
프로토타입
- int ft_isdigit(int c)
매개변수
-int c : 문자 하나
리턴값
- 들어온 값이 숫자면 1 , 아니면 0을 리턴
설명
- 해당 값이 숫자인지 확인하는 함수
int ft_isdigit(int c)
{
if (c >= '0' && c <= '9')
return (1);
else
return (0);
}
18. isalnum
함수이름
- ft_isalnum
프로토타입
- int ft_isalnum(int c)
매개변수
-int c : 문자 하나
리턴값
- 들어온 값이 알파벳이거나 숫자면 1, 아니라면 0을 리턴
설명
- 해당 값이 알파벳이거나 숫자인지 확인하는 함수
19. isascii
함수이름
- ft_isascii
프로토타입
- int ft_isascii(int c)
매개변수
-int c : 문자 하나
리턴값
- 들어온 값이 아스키코드면 1 , 아니라면 0을 리턴
설명
- 해당 값이 아스키코드인지 확인하는 함수
int ft_isascii(int c)
{
if (c >= 0 && c <= 127)
return (1);
else
return (0);
}
20. isprint
함수이름
- ft_isprint
프로토타입
- int ft_isprint(int c)
매개변수
-int c : 문자 하나
리턴값
- 들어온 값이 출력가능한 값이면 1, 아니면 0을 리턴
설명
- 해당 값이 출력가능한 문자인지 확인하는 함수
int ft_isprint(int c)
{
if (c >= 32 && c < 127)
return (1);
else
return (0);
}
21. toupper
함수이름
- ft_toupper
프로토타입
- int ft_toupper(int c)
매개변수
-int c : 문자 하나
리턴값
- 들어온 값이 소문자이면 대문자로 치환해준다.
설명
- 대문자로 치환해주는 함수
#include "libft.h"
int ft_toupper(int c)
{
if (c >= 'a' && c <= 'z')
return (c - 32);
else
return (c);
}
22. tolower
함수이름
- ft_tolower
프로토타입
- int ft_tolower(int c)
매개변수
-int c : 문자 하나
리턴값
- 들어온 값이 대문자이면 소문자로 치환해준다.
설명
- 소문자로 치환해주는 함수
#include "libft.h"
int ft_tolower(int c)
{
if (c >= 'A' && c <= 'Z')
return (c + 32);
else
return (c);
}
23. calloc
함수이름
- ft_calloc
프로토타입
- void *ft_calloc(size_t count, size_t size)
매개변수
- size_t count : malloc할 크기
- size_t size : mallocgkf byte 크기
리턴값
- void * : 0을 초기화한 주소반환
설명
- size 크기의 변수를 count 개수만큼 malloc 해주고 값을 0으로 초기화 해주는 함수
malloc과 다르점은 메로리공간을 할당하고 0으로 값을 초기화해준다.
#include "libft.h"
void *ft_calloc(size_t count, size_t size)
{
char *tmp;
if (!(tmp = (char *)malloc(size * count)))
return (NULL);
ft_memset(tmp, 0, size * count);
return (tmp);
}
24. strdup
함수이름
- ft_strdup
프로토타입
- void *ft_strdup(const char *s)
매개변수
-const char *s : 복사할 문자열
리턴값
- char * : 복사한 문자열의 주소 반환
설명
- 문자열 s + 1개(널값) 만큼 동적할당 한 후 문자열 s를 복사하는 함수
- 내부적으로 malloc함수를 사용하므로 반환받은 메모리는 free함수를 이용해 메모리를 해제해줘야 한다.
#include "libft.h"
char *ft_strdup(const char *s)
{
int s_len;
char *tmp;
int i;
i = 0;
s_len = ft_strlen(s);
if (!((tmp = (char *)malloc(sizeof(char) * (s_len + 1)))))
return (NULL);
while (i < s_len)
{
tmp[i] = s[i];
++i;
}
tmp[i] = '\0';
return (tmp);
}