예전에 작성했던 split보다 좀 더(?) 복잡한 형식의 split함수를 구현했었다.
추가된건 free를 해줘야하는 부분 밖에 없었지만..
split함수는 "a,b,c" 같은 문자열을 ',' 같은 반복적인 구분자를 이용해
['a' , 'b', 'c'] 이렇게 문자열 배열로 나누는 것을 말한다!
char ** ft_split(const char s, char c)
#include <stdio.h>
#include <stdlib.h>
static void ft_freeup(char **ptr, size_t idx)
{
while (idx > 0)
{
idx--;
free(ptr[idx]);
}
free(ptr);
return (0);
}
static size_t ft_count_words(const char *s, char c)
{
size_t i;
size_t cnt;
i = 0;
cnt = 0;
while (s[i] != '\0')
{
if (s[i] == c)
i++;
else
{
cnt++;
while (s[i] && s[i] != c)
i++;
}
}
return (cnt);
}
static void ft_put_word(char *ptr_word, const char *s, size_t i, size_t word_len)
{
size_t j;
j = 0;
while (word_len > 0)
{
ptr_word[j] = s[i - word_len];
word_len--;
j++;
}
ptr_word[j] = '\0';
}
static char **ft_put_words(char **ptr, const char *s, char c, size_t len)
{
size_t i;
size_t word;
size_t word_len;
i = 0;
word = 0;
word_len = 0;
while (word < len)
{
if (s[i] && s[i] == c)
i++;
while (s[i] && s[i] != c)
{
i++;
word_len++;
}
ptr[word] = (char *)malloc(sizeof(char) * (word_len + 1));
if (!ptr[word])
ft_freeup(ptr, word);
ft_put_word(ptr[word], s, i, word_len);
word++;
word_len = 0;
}
ptr[word] = '\0';
return (ptr);
}
char **ft_split(const char *s, char c)
{
size_t len;
char **ptr;
if (!s)
return (0);
len = ft_count_words(s, c);
ptr = (char **)malloc(sizeof(char **) * (len + 1));
if (!ptr)
return (0);
ptr = ft_put_words(ptr, s, c, len);
return (ptr);
}
Makefile이랑 libft.h인 헤더파일 만드는 방법도 밤에 추가하자!!