Files
mmoat/lib/libft/srcs/str/ft_strtrim.c
gazhonsepaskwa 09c2cb5b3e base struct
2025-01-13 13:21:53 +01:00

78 lines
2.0 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strtrim.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: nalebrun <nalebrun@student.s19.be> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/14 17:42:56 by nalebrun #+# #+# */
/* Updated: 2024/11/25 16:16:44 by nalebrun ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../libft.h"
static int ft_instr(int c, char *str)
{
int i;
i = -1;
while (str[++i])
if (str[i] == c)
return (1);
return (0);
}
static int ft_gettrimstart(const char *str, const char *set)
{
int i;
i = 0;
while (ft_instr(str[i], (char *)set) && str[i])
i++;
return (i);
}
static int ft_gettrimend(const char *str, const char *set)
{
int i;
i = 0;
while (ft_instr(str[ft_strlen(str) - i - 1], (char *)set))
i++;
return (i);
}
static void trloop(char *cpy, const char *s1, size_t trimstart, size_t trimend)
{
size_t i;
i = 0;
while (i < ft_strlen(s1) - (trimstart + trimend))
{
cpy[i] = s1[trimstart + i];
i++;
}
cpy[i] = 0;
}
char *ft_strtrim(const char *s1, const char *set)
{
char *cpy;
size_t trimstart;
size_t trimend;
if (!s1 || !set)
return (NULL);
cpy = (char *)s1;
trimstart = ft_gettrimstart(s1, set);
if (trimstart == ft_strlen(s1))
return (ft_strdup(""));
trimend = ft_gettrimend(s1, set);
cpy = ft_calloc(ft_strlen(s1) - (trimstart + trimend) + 1, sizeof(char));
if (!cpy)
return (NULL);
trloop(cpy, s1, trimstart, trimend);
return (cpy);
}