#include "libft.h"
char *ft_substr(char const *s, unsigned int start, size_t len)
{
char *str;
if (s == NULL)
return (NULL);
if (ft_strlen(s) < start)
return (ft_strdup(""));
if (!(str = (char *)malloc(sizeof(char) * (len + 1))))
return (NULL);
ft_strlcpy(str, s + start, len + 1);
return (str);
}
#include "libft.h"
char *ft_strjoin(char const *s1, char const *s2)
{
char *ptr;
int len;
int i;
if (s1 == NULL && s2 == NULL)
return (NULL);
else if (!(s1) || !(s2))
return (!(s1) ? ft_strdup(s2) : ft_strdup(s1));
len = ft_strlen(s1) + ft_strlen(s2);
if (!(ptr = (char *)malloc(sizeof(char) * (len + 1))))
return (NULL);
i = 0;
while (*s1 != 0)
ptr[i++] = *s1++;
while (*s2 != 0)
ptr[i++] = *s2++;
ptr[i] = 0;
return (ptr)
}
#include "libft.h"
size_t ft_start(char const *s1, char const *set, size_t slen)
{
size_t i;
i = 0;
while (i < slen && ft_strchr(set, s1[i]))
i++;
return (i);
}
size_t ft_end(char const *s1, char const *set, size_t slen)
{
size_t i;
i = 0;
while (i < slen && ft_strchr(set, s1[slen - i - 1]))
i++;
return (slen - i);
}
char *ft_strtrim(char const *s1, char const *set)
{
char *str;
size_t slen;
size_t start;
size_t end;
size_t i;
if (s1 == 0)
return (0);
if (set == 0)
return (ft_strdup(s1));
i = 0;
slen = ft_strlen(s1);
start = ft_start(s1, set, slen);
end = ft_end(s1, set, slen);
if (start >= end)
return (ft_strdup(""));
if (!(str = (char *)malloc(sizeof(char) * (end - start - 1))))
return (0);
ft_strlcpy(str, s1 + start, end - start + 1);
return (str);
}
기능 : malloc을 할당하고 문자열의 처음과 끝에서 'set'에 지정된 문자가 제거된 문자열 's1'의 사본을 반환.
return : 문자가 제거된 문자열. 할당 실패시 NULL.
예제 :
s1 = "abc123cba" set = "abc" --> "123"
s1 = "abc123c4ab" set = "abc" --> "123c4"
#include "libft.h"
size_t get_count(const char *s, char c)
{
size_t cnt;
size_t i;
int flag;
i = 0;
cnt = 0;
flag = 0;
while (s[i])
{
if (s[i] == c && s[i])
flag = 0;
else if (!flag && s[i] != c && s[i])
{
cnt++;
flag = 1;
}
i++;
}
return (cnt);
}
void copy(char *dst, char const *src, size_t start, size_t end)
{
size_t i;
i = 0;
while (start < end)
dst[i++] = src[start++];
dst[i] = 0;
}
void split(char const *s, char c, char **str)
{
size_t start;
size_t i;
size_t j;
start = 0;
i = 0;
j = 0;
while (s[i])
{
if (s[i] != c && s[i])
{
start = i;
while (s[i] != c && s[i])
i++;
if (!(str[j] = (char *)malloc(sizeof(char) * (i - start + 1))))
return ;
copy(str[j], s, start, i);
j++;
}
else if (s[i])
i++;
}
}
char **ft_split(char const *s, char c)
{
char **str;
size_t n;
if (s == 0)
return (NULL);
n = get_count(s, c);
if (!(str = (char **)malloc(sizeof(char *) * (n + 1))))
return (NULL);
str[n] = 0;
if (n == 0)
return (str);
split(s, c, str);
return (str);
}
#include "libft.h"
size_t nlen(long long n)
{
size_t i;
i = 0;
if (n == 0)
return (1);
else if (n < 0)
n *= -1;
while (n > 0)
{
n /= 10;
i++;
}
return (i);
}
void do_itoa(long long temp, char *str, size_t len)
{
str[len] = 0;
if (temp == 0)
{
str[--len] = '0';
return ;
}
while (temp > 0)
{
str[--len] = (temp % 10) + '0';
temp /= 10;
}
}
char *ft_itoa(int n)
{
char *str;
size_t len;
long long temp;
len = nlen(n);
temp = n;
if (n < 0)
{
temp *= -1;
len++;
}
if (!(str = (char *)malloc(sizeof(char) * (len + 1))))
return (0);
if (n < 0)
str[0] = '-';
do_itoa(temp, str, len);
return (str);
}
#include "libft.h"
char *ft_strmapi(char const *s, char (*f)(unsigned int, char))
{
size_t len;
size_t i;
char *str;
i = 0;
if (s == 0)
return (0);
len = ft_strlen(s);
if (!(str = (char *)malloc(sizeof(char) * (len + 1))))
return (0);
while (i < len)
{
str[i] = f(i, s[i]);
i++;
}
str[i] = 0;
return (str);
}
#include "libft.h"
void ft_putchar_fd(char c, int fd)
{
if (fd < 0)
return ;
write(fd, &c, 1);
}
#include "libft.h"
void ft_putstr_fd(char *s, int fd)
{
size_t i;
i = 0;
if (fd < 0)
return ;
while (s[i])
{
write(fd, &s[i], 1);
i++;
}
}
#include "libft.h"
void ft_putendl_fd(char *s, int fd)
{
if (fd < 0)
return ;
write(fd, s, ft_strlen(s));
write(fd, "\n", 1);
}
#include "libft.h"
void ft_putnbr_fd(int n, int fd)
{
if (fd < 0)
return ;
if (n == -2147483648)
{
ft_putstr_fd("-2147483648", fd);
return ;
}
if (n < 0)
{
ft_putchar_fd('-', fd);
n *= -1;
}
if (n >= 10)
{
ft_putnbr_fd(n / 10, fd);
ft_putnbr_fd(n % 10, fd);
}
if (n < 10)
ft_putchar_fd(n + '0', fd);
}