Libft
42 Libft library documentation
Loading...
Searching...
No Matches
ft_split.c
Go to the documentation of this file.
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* ft_split.c :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: raphalme <raphalme@student.42.fr> +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2025/12/29 19:05:00 by raphalme #+# #+# */
9/* Updated: 2026/04/14 10:45:22 by raphalme ### ########.fr */
10/* */
11/* ************************************************************************** */
12
13#include "../includes/libft.h"
14
15static char **ft_fill_split(char **split, char const *s, char c);
16static size_t ft_count_words(char const *s, char c);
17static void ft_free_split(char **split, size_t i);
18
19
30char **ft_split(char const *s, char c)
31{
32 char **split;
33
34 if (!s)
35 return (NULL);
36 split = malloc(sizeof(char *) * (ft_count_words(s, c) + 1));
37 if (!split)
38 return (NULL);
39 return (ft_fill_split(split, s, c));
40}
41
50static char **ft_fill_split(char **split, char const *s, char c)
51{
52 size_t i;
53 size_t j;
54 size_t start;
55
56 i = 0;
57 j = 0;
58 while (s[i])
59 {
60 if (s[i] != c)
61 {
62 start = i;
63 while (s[i] && s[i] != c)
64 i++;
65 split[j] = ft_substr(s, start, i - start);
66 if (!split[j++])
67 return (ft_free_split(split, j - 1), NULL);
68 }
69 else
70 i++;
71 }
72 split[j] = NULL;
73 return (split);
74}
75
83static size_t ft_count_words(char const *s, char c)
84{
85 size_t count;
86 size_t i;
87
88 count = 0;
89 i = 0;
90 while (s[i])
91 {
92 if (s[i] != c)
93 {
94 count++;
95 while (s[i] && s[i] != c)
96 i++;
97 }
98 else
99 i++;
100 }
101 return (count);
102}
103
110static void ft_free_split(char **split, size_t i)
111{
112 while (i > 0)
113 free(split[--i]);
114 free(split);
115}
static size_t ft_count_words(char const *s, char c)
Counts words separated by a delimiter in a string.
Definition ft_split.c:83
char ** ft_split(char const *s, char c)
Splits a string into an array of substrings.
Definition ft_split.c:30
static void ft_free_split(char **split, size_t i)
Frees partially allocated split entries.
Definition ft_split.c:110
static char ** ft_fill_split(char **split, char const *s, char c)
Fills the split array with allocated word substrings.
Definition ft_split.c:50
char * ft_substr(char const *s, unsigned int start, size_t len)
Extracts a substring from a string.
Definition ft_substr.c:23