/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_split.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: gbaconni +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/08/22 18:14:04 by gbaconni #+# #+# */ /* Updated: 2021/08/24 13:00:34 by gbaconni ### ########.fr */ /* */ /* ************************************************************************** */ #include #include static char *ft_strncpy(char *dest, char *src, unsigned int n) { unsigned int i; i = 0; while (i < n && src[i] != '\0') { dest[i] = src[i]; i++; } while (i < n) { dest[i] = '\0'; i++; } dest[i] = '\0'; return (dest); } static int ft_is_charset(char c, char *charset) { int i; i = 0; while (charset[i] != '\0') { if (c == charset[i]) return (1); i++; } return (0); } static int ft_split_len(char *str, char *charset) { char *p_str; int size; size = 2; p_str = str; while (*p_str != '\0') { if (ft_is_charset(*p_str++, charset) == 1) size++; } return (size); } char *ft_copy(char *str, int size) { char *result; result = (char *) malloc((size + 1) * sizeof(char)); if (size > 0) ft_strncpy(result, str, size); else result[0] = '\0'; return (result); } char **ft_split(char *str, char *charset) { char **strs; char *start; int size; int i; size = ft_split_len(str, charset); strs = malloc((size) * sizeof(strs)); start = str; i = 0; while (1) { if (ft_is_charset(*str, charset) == 1 || *str == '\0') { size = str - start; if (size > 0) strs[i++] = ft_copy(start, size); start = str + 1; if (*str == '\0') break ; } str++; } strs[i] = ft_copy(str, 0); return (strs); }