728x90
반응형
이번 함수들은 문자열과 관련된 함수들이다.
ft_strchr: 문자열 s에서 문자 c를 찾아 그 위치를 반환해주는 함수
char *ft_strchr(const char *s, int c)
{
int i;
i = 0;
while (i < (int)ft_strlen(s) + 1)
{
if (s[i] == (char)c)
return ((char *)s + i);
i++;
}
return (NULL);
}
ft_strdup: 문자열 s를 복사한 문자열을 반환해주는 함수
새 문자열에 s의 길이 + 1 만큼 할당해주고 s를 그대로 복사해주면 된다. 마지막에 null을 넣어주는 것을 잊지 말자!
char *ft_strdup(const char *s)
{
char *str;
int i;
int slen;
i = 0;
slen = (int)ft_strlen(s);
if (!(str = (char *)malloc(sizeof(*s) * (slen + 1))))
return (NULL);
while (s[i])
{
str[i] = s[i];
i++;
}
str[i] = '\0';
return (str);
}
ft_strjoin: 두 문자열을 s1, s2를 합친 문자열을 반환해주는 함수
새 문자열에 s1의 길이 + s2의 길이 + 1 만큼 할당해주고, s1과 s2를 순서대로 복사해주면 된다.
마지막에 null을 넣어주는 것을 잊지 말자!
char *ft_strjoin(char const *s1, char const *s2)
{
char *str;
int i;
int j;
int s1_len;
int s2_len;
i = 0;
j = 0;
if (s1 == 0 || s2 == 0)
return (NULL);
s1_len = (int)ft_strlen(s1);
s2_len = (int)ft_strlen(s2);
if (!(str = (char *)malloc(sizeof(char) * (s1_len + s2_len + 1))))
return (NULL);
while (i < s1_len)
{
str[i] = s1[i];
i++;
}
while (j < s2_len)
str[i++] = s2[j++];
str[i] = '\0';
return (str);
}
ft_strlcat: 문자열 dst에 문자열 src를 이어 붙이고, 그 길이를 반환하는 함수
dest의 길이가 size보다 크면 size + src의 길이를 반환하고
dest의 길이가 size보다 크지 않으면 dest의 길이 + src길이를 반환해주면 된다.
size_t ft_strlcat(char *dst, const char *src, size_t size)
{
size_t i;
int j;
size_t k;
i = ft_strlen(dst);
j = 0;
if (size < i)
k = size;
else
k = i;
while (src[j] && i < size - 1 && size != 0)
dst[i++] = src[j++];
while (src[j] != '\0')
j++;
dst[i] = '\0';
return (k + j);
}
ft_strlcpy: size만큼 문자열 src를 문자열 dst에 복사하고, src의 크기를 반환해주는 함수
src를 size만큼만 복사해주면 된다.
strlcat 함수도 그렇고 복사해준 src의 길이가 아니라 src의 크기 그 자체를 반환하는 게 조금 아이러니한 것 같다.
size_t ft_strlcpy(char *dst, const char *src, size_t size)
{
size_t i;
size_t src_len;
i = 0;
if (dst == 0 || src == 0)
return (0);
src_len = ft_strlen(src);
if (size > 0)
{
while (i < (size - 1) && src[i])
{
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
return (src_len);
}
728x90
반응형
'42 SEOUL > Libft' 카테고리의 다른 글
42 서울 Libft(ft_strrchr, ft_strtrim, ft_substr, ft_tolower, ft_toupper) (2) | 2021.01.25 |
---|---|
42 서울 Libft(ft_strlen, ft_strmapi, ft_strncmp, ft_strnstr) (0) | 2021.01.25 |
42 서울 Libft(ft_putchar_fd, ft_putstr_fd, ft_putendl_fd, ft_putnbr_fd) (0) | 2021.01.25 |
42 서울 Libft(ft_memcpy, ft_memccpy, ft_memchr, ft_memcmp, ft_memmove) (0) | 2021.01.24 |
42 서울 Libft(ft_split) (0) | 2020.12.19 |