-
Notifications
You must be signed in to change notification settings - Fork 0
/
ft_split.c
130 lines (114 loc) · 2.65 KB
/
ft_split.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* ************************************************************************** */
/* */
/* :::::::: */
/* ft_split.c :+: :+: */
/* +:+ */
/* By: dreijans <dreijans@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2022/11/02 19:34:23 by dreijans #+# #+# */
/* Updated: 2023/01/02 20:25:48 by dreijans ######## odam.nl */
/* */
/* ************************************************************************** */
#include "libft.h"
static int lencount(char *s, char c)
{
int i;
i = 0;
while (s[i] != '\0' && s[i] != c)
{
i++;
}
return (i);
}
static int wordcount(char const *s, char c)
{
int i;
int word;
word = 0;
i = 0;
if (s == NULL)
return (0);
while (s[i] != '\0')
{
while (s[i] == c && s[i] != '\0')
i++;
if (s[i] != '\0')
word++;
while (s[i] != c && s[i] != '\0')
i++;
}
return (word);
}
static char **freedom(char **md_array)
{
int i;
i = 0;
while (md_array[i] != NULL)
{
free(md_array[i]);
i++;
}
free(md_array);
return (NULL);
}
static char *fill(char const *s, char c, int *i)
{
char *str;
char *d;
int len;
d = (char *)s;
len = lencount(d, c);
str = ft_substr(d, 0, len);
if (str == 0)
{
return (0);
}
*i += len;
return (str);
}
char **ft_split(char const *s, char c)
{
char **split_str;
int i;
int j;
i = 0;
j = 0;
if (s == NULL)
return (NULL);
split_str = (char **)malloc((sizeof(char *) * (wordcount(s, c) + 1)));
if (split_str == NULL)
return (NULL);
while (s[i] != '\0')
{
while (s[i] && s[i] == c)
i++;
if (s[i] == '\0')
break ;
split_str[j] = fill(&s[i], c, &i);
if (split_str[j] == NULL)
return (freedom(split_str));
j++;
}
split_str[j] = NULL;
return (split_str);
}
/*
Parameters:
s: The string to be split.
c: The delimiter character.
Return value:
The array of new strings resulting from the split.
NULL if the allocation fails.
External functs:
malloc,
free
Description:
Allocates (with malloc(3))
returns an array of strings obtained by splitting s
using the character ’c’ as a delimiter.
The array must end with a NULL pointer.
extra function messes with value of i and j.
uses pointers to change value not the addres
break prevents from accessing unallocated memory
stops the loop
*/