SUBSTR 함수는 문자단위로 시작위치와 자를 길이를 지정하여 문자열을 자른다.
#include"libft.h"
char *ft_substr(char const *s, unsigned int start, size_t len)
{
size_t i;
size_t j;
char *res;
i = 0;
j = 0;
if (!s)
return (NULL);
res = (char *)malloc(sizeof(char) * (len + 1));
if (!res)
return (NULL);
while (s[i])
{
if (i >= start && j < len)
{
res[j] = s[i];
j++;
}
i++;
}
res[j] = '\0';
return (res);
}
char ft_strjoin(char const s1, char const *s2);
malloc(3) 을 이용하여 메모리를 할당받은 후, 문자열 's1' 과 's2' 를 이어붙인 새로운 문자열을 생성하여 반환합니다.
#include"libft.h"
char *ft_strjoin(char const *s1, char const *s2)
{
size_t len_s1;
size_t len_s2;
char *res;
if (!s1 || !s2)
return (NULL);
len_s1 = ft_strlen(s1);
len_s2 = ft_strlen(s2);
res = (char *)malloc(sizeof(char) * (len_s1 + len_s2 + 1));
if (!res)
return (NULL);
ft_memcpy(res, s1, len_s1);
ft_memcpy(res + len_s1, s2, len_s2);
res[len_s1 + len_s2] = 0;
return (res);
}
char ft_strtrim(char const s1, char const *set)
반환 값
s1
에서 찾은 set
에 포함된 문자들을 양 끝에서 제거한 후 결과 문자열, 할당 실패 시 NULL 반환.
설명
malloc(3)를 사용하여 할당하고 문자열의 처음과 끝에서 'set'에 지정된 문자가 제거된 's1' 복사본을 반환
#include"libft.h"
char *ft_strtrim(char const *s1, char const *set)
{
size_t start;
size_t end;
char *res;
if (!s1)
return (NULL);
if (!set)
return (ft_strdup(s1));
start = 0;
end = ft_strlen(s1);
while (s1[start] && ft_strchr(set, s1[start]))
start++;
while (s1[end - 1] && ft_strchr(set, s1[end - 1]))
{
if (end - 1 < 1)
break ;
end--;
}
if (start > end)
return (ft_strdup(""));
res = (char *)malloc(sizeof(char) * (end - start + 1));
if (!res)
return (NULL);
ft_strlcpy(res, s1 + start, end - start + 1);
return (res);
}
char *ft_split(char str, char *charset)
str 문자열을 charset의 구분자를 기준으로 분할하여 return 하는 함수
분할한 새 문자열 배열, 할당 실패 시 NULL 반환
split함수는 2차원메모리를 할당하는 함수이므로 반드시 메모리 해제를 잊지않고 해야됩니다.
sizeof(char ) (ft_word_cnt(str, c) + 1) 괄호 안함 이거 Abort error
while 문에 continue를 안함
→ str의 값과 c가 같은 경우 str의 주소값을 두 번 증가시킴
ft_split 함수와 ft_word_cnt 둘 다 continue 추가
#include"libft.h"
char **ft_free(char **res)
{
unsigned int i;
i = 0;
while (res[i])
{
free(res[i]);
i++;
}
free(res);
return (NULL);
}
unsigned int ft_word_cnt(char const *str, char c)
{
unsigned int cnt;
cnt = 0;
while (*str)
{
if (*str++ == c)
continue ;
++cnt;
while (*str && *str != c)
++str;
}
return (cnt);
}
void ft_strcpy(char *dst, char *from, char const *until)
{
while (from < until)
*(dst++) = *(from++);
*dst = '\0';
}
char **ft_split_alloc(char const *str, char c)
{
if (!str)
return (NULL);
return ((char **)malloc(sizeof(char *) * (ft_word_cnt(str, c) + 1)));
}
char **ft_split(char const *str, char c)
{
char **res;
unsigned int i;
char *from;
res = ft_split_alloc(str, c);
if (!res)
return (NULL);
i = 0;
while (*str)
{
if (*str++ == c)
continue ;
from = (char *)str - 1;
while (*str && *str != c)
str++;
res[i] = (char *)malloc(sizeof(char) * (str - from + 1));
if (!(res[i]))
return (ft_free(res));
ft_strcpy(res[i++], from, str);
}
res[i] = NULL;
return (res);
}
숫자를 입력받아 이를 문자열로 표현하는 함수
malloc(3) 을 이용하여 메모리를 할당받은 후, 인자로 받은 정수를 나타내는 문자열을 반환합니다. 음수 또한 무조건 처리되어야 합니다.
틀린 이유 : int의 가장 작은 값이 -23ㅇ어짜고 처리안함 ㅜ
#include"libft.h"
int get_divisor(int n, int *size)
{
int divisor;
unsigned int nbr;
*size = 1;
if (n < 0)
{
++*size;
nbr = -n;
}
else
nbr = n;
divisor = 1;
while (nbr >= 10)
{
nbr /= 10;
divisor *= 10;
++*size;
}
return (divisor);
}
char *ft_itoa(int n)
{
unsigned int nbr;
int divisor;
int size;
char *res;
divisor = get_divisor(n, &size);
res = (char *)malloc(sizeof(char) * (size + 1));
if (!res)
return (NULL);
size = 0;
nbr = n;
if (n < 0)
{
res[size++] = '-';
nbr = -n;
}
while (divisor > 0)
{
res[size++] = nbr / divisor + '0';
nbr %= divisor;
divisor /= 10;
}
res[size] = '\0';
return (res);
}
char ft_strmapi(char const s, char (*f)(unsigned int, char))
ft_strmapi
는 문자열 s
를 함수 f
에 적용시킨 새로운 문자열
을 만들어서 리턴해주는 함수이다.
문자열 's' 의 각 문자를 순회하며 함수 'f'를 적용하고, 해당 문자의 인덱스를 함수 'f'의 첫 번째 인자로 사용합니다. 각 문자에 함수가 적용된 새로운 문자열을 생성합니다 (malloc(3) 을 이용하여 메모리를 할당)
#include"libft.h"
char *ft_strmapi(char const *s, char (*f)(unsigned int, char))
{
char *res;
size_t i;
size_t len;
if (!s)
return (NULL);
len = ft_strlen(s);
res = (char *)malloc(sizeof(char) * (len + 1));
if (!res)
return (NULL);
i = 0;
while (s[i])
{
res[i] = (*f)(i, s[i]);
i++;
}
res[i] = 0;
return (res);
}
void ft_striteri(char s, void (f)(unsigned int, char*))
문자열 's' 의 각 문자를 순회하며 함수 'f'를 적용하고, 해당 문자의 인덱스를 함수 'f'의 첫 번째 인자로 사용합니다. 또한 각 문자의 주소값이 'f' 함수의 두 번째 인자로 사용되며, 경우에 따라 수정될 수 있습니다.
#include"libft.h"
void ft_striteri(char *s, void (*f)(unsigned int, char*))
{
int i;
if (!s)
return ;
i = 0;
while (*s)
{
(*f)(i, s);
s++;
i++;
}
}
제공받은 파일 식별자에 문자 'c'를 출력합니다.
(Non-negative Integer)
을 갖는다.#include"libft.h"
void ft_putchar_fd(char c, int fd)
{
if (fd < 0)
return ;
write (fd, &c, 1);
}
void ft_putstr_fd(char *s, int fd)
: 문자열 s
를 주어진 파일디스크립터로 출력
제공받은 파일 식별자에 문자열 's'를 출력합니다.
#include"libft.h"
void ft_putstr_fd(char *s, int fd)
{
if (!s || fd < 0)
return ;
write (fd, s, ft_strlen(s));
}
제공받은 파일 식별자에 문자열 's'를 출력하고, 개행을 출력합니다.
#include"libft.h"
void ft_putendl_fd(char *s, int fd)
{
if (!s || fd < 0)
return ;
write (fd, s, ft_strlen(s));
write (fd, "\n", 1);
}
void ft_putnbr_fd(int n, int fd)
제공받은 파일 식별자에 정수 'n'를 출력합니다.
#include"libft.h"
void ft_putnbr_fd(int n, int fd)
{
unsigned int nbr;
nbr = n;
if (n < 0)
{
nbr = -n;
ft_putchar_fd('-', fd);
}
if (nbr >= 10)
ft_putnbr_fd(nbr / 10, fd);
ft_putchar_fd((nbr % 10) + '0', fd);
}