diff --git a/Makefile b/Makefile index 6450e51..56009b5 100755 --- a/Makefile +++ b/Makefile @@ -1,19 +1,28 @@ -NAME = libft.a +NAME = libft.a -SRCS = ft_isalpha.c ft_isdigit.c ft_isascii.c ft_isprint.c ft_isalnum.c \ - ft_strlen.c ft_strlcpy.c ft_strlcat.c ft_strchr.c ft_strrchr.c ft_strncmp.c \ - ft_strnstr.c ft_strdup.c ft_toupper.c ft_tolower.c ft_atoi.c ft_bzero.c \ - ft_memset.c ft_memchr.c ft_memcpy.c ft_memcmp.c ft_memmove.c ft_calloc.c \ - ft_substr.c ft_strjoin.c ft_strtrim.c ft_split.c ft_itoa.c ft_strmapi.c \ - ft_striteri.c ft_putchar_fd.c ft_putnbr_fd.c ft_putendl_fd.c ft_putstr_fd.c \ - ft_nbrlen.c ft_strrev.c ft_itox.c ft_utoa.c +SRCS = is/ft_isalpha.c is/ft_isdigit.c is/ft_isascii.c is/ft_isprint.c \ + is/ft_isalnum.c -SRCS_BONUS = ft_lstsize_bonus.c ft_lstnew_bonus.c ft_lstlast_bonus.c \ - ft_lstadd_back_bonus.c ft_lstadd_front_bonus.c ft_lstdelone_bonus.c \ - ft_lstclear_bonus.c ft_lstiter_bonus.c ft_lstmap_bonus.c +SRCS += str/ft_strlen.c str/ft_strlcpy.c str/ft_strlcat.c str/ft_strchr.c \ + str/ft_strrchr.c str/ft_strncmp.c str/ft_strnstr.c str/ft_strdup.c \ + str/ft_substr.c str/ft_strjoin.c str/ft_strtrim.c str/ft_split.c \ + str/ft_strrev.c str/ft_strmapi.c str/ft_striteri.c + +SRCS += conv/ft_toupper.c conv/ft_tolower.c conv/ft_atoi.c conv/ft_itoa.c \ + conv/ft_itox.c conv/ft_utoa.c + +SRCS += mem/ft_bzero.c mem/ft_memset.c mem/ft_memchr.c mem/ft_memcpy.c \ + mem/ft_memcmp.c mem/ft_memmove.c mem/ft_calloc.c + +SRCS += put/ft_putchar_fd.c put/ft_putnbr_fd.c put/ft_putendl_fd.c put/ft_putstr_fd.c + +SRCS += nbr/ft_nbrlen.c + +SRCS += lst/ft_lstsize.c lst/ft_lstnew.c lst/ft_lstlast.c \ + lst/ft_lstadd_back.c lst/ft_lstadd_front.c lst/ft_lstdelone.c \ + lst/ft_lstclear.c lst/ft_lstiter.c lst/ft_lstmap.c OBJS = $(SRCS:.c=.o) -OBJS_BONUS = $(SRCS_BONUS:.c=.o) CC = gcc AR = ar -rcs @@ -29,11 +38,6 @@ all : $(NAME) $(NAME): $(OBJS) ${AR} ${NAME} ${OBJS} - - -bonus: $(OBJS) $(OBJS_BONUS) - ${AR} ${NAME} ${OBJS} ${OBJS_BONUS} - clean: ${RM} ${OBJS} ${RM} ${OBJS_BONUS} diff --git a/README.md b/README.md index b9e54fc..21c9db6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,71 @@ # Libft -Projet de l'école 42 : Libft \ No newline at end of file +42 school project. + +## Available functions : + +### Characters check [is]: +| Function | Description | Optimized | +|------------|-----------------------------|-----------| +| ft_isalpha | is it a letter ? | [ ] | +| ft_isdigit | is it a a digit ? | [ ] | +| ft_isalnum | is it a a letter or digit ? | [ ] | +| ft_isascii | is it a an ascii ? | [ ] | +| ft_isprint | is it printable ? | [ ] | +| ft_isspace | is it a space character ? | [ ] | +| ft_isupper | is it an uppercase ? | [ ] | +| ft_islower | is it a lowercase ? | [ ] | + +### Conversions [conv]: +| Function | Description | Optimized | +|------------|--------------------------------------|-----------| +| ft_atoi | Convert a string to an integer | [ ] | +| ft_itoa | Convert an integer to a string | [ ] | +| ft_utoa | Convert an unsigned to a string | [ ] | +| ft_itox | Convert an intger to his hexa string | [ ] | +| ft_toupper | Convert a letter to upper | [ ] | +| ft_tolower | Convert a letter to lower | [ ] | + +### Strings manipulation [str]: +| Function | Description | Optimized | +|-------------|--------------------------------------------|-----------| +| ft_split | Slit a spring by separator | [ ] | +| ft_strchr | Search for a char into string | [ ] | +| ft_strdup | Duplicate a string | [ ] | +| ft_striteri | Iterate function on a string pointers | [ ] | +| ft_strjoin | Join two strings | [ ] | +| ft_strlcat | Concat substr to another | [ ] | +| ft_strlcpy | Copy a n char of a string in another | [ ] | +| ft_strlen | Get length of a string | [ ] | +| ft_strmapi | Get returns of function on a string chars. | [ ] | +| ft_strncmp | Compare two strings | [ ] | +| ft_strnstr | Search a string into another | [ ] | +| ft_strrchr | Reverse search a char in a string | [ ] | +| ft_strrev | Reverse a string | [ ] | +| ft_strtrim | Trim a string using charsset | [ ] | +| ft_substr | Return a copy of a sub string | [ ] | + +### Numbers manipulation [nbr]: +| Function | Description | Optimized | +|------------|-----------------------------|-----------| +| ft_nbrlen | Get the number length | [ ] | + +### Memory manipulation [mem]: +| Function | Description | Optimized | +|------------|-------------|-----------| +| ft_bzero | | [ ] | +| ft_calloc | | [ ] | +| ft_memchr | | [ ] | +| ft_memcmp | | [ ] | +| ft_memcpy | | [ ] | +| ft_memmove | | [ ] | +| ft_memset | | [ ] | +### Display [put]: +| Function | Description | Optimized | +|---------------|-------------|-----------| +| ft_putchar_fd | | [ ] | +| ft_putstr_fd | | [ ] | +| ft_putnbr_fd | | [ ] | +| ft_putendl | | [ ] | + + diff --git a/conv/ft_atoi.c b/conv/ft_atoi.c new file mode 100755 index 0000000..3e85290 --- /dev/null +++ b/conv/ft_atoi.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 17:06:25 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_atoi(const char *str) +{ + int sign; + int nb; + + nb = 0; + sign = 1; + while (*str == ' ' || (*str >= '\t' && *str <= '\r')) + str++; + if (*str == '-' && ++str) + sign = -1; + else if (*str == '+') + str++; + while (*str >= '0' && *str <= '9') + { + if (nb < 0 && sign > 0) + return (-1); + else if (nb < 0 && sign < 0) + return (0); + nb = nb * 10 + (*str - '0') % 10; + str++; + } + return ((int)(sign * nb)); +} diff --git a/conv/ft_itoa.c b/conv/ft_itoa.c new file mode 100755 index 0000000..c7d9581 --- /dev/null +++ b/conv/ft_itoa.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 15:50:47 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itoa(int n) +{ + char *ret; + unsigned int i; + unsigned int neg; + + if (n == -2147483648) + return (ft_strdup("-2147483648")); + if (n == 0) + return (ft_strdup("0")); + i = 0; + neg = 0; + ret = ft_calloc(ft_ilen(n) + 1, sizeof(char)); + if (!ret) + return (NULL); + if (n < 0) + { + n = -n; + neg = 1; + } + while (n) + { + ret[i++] = (n % 10) + '0'; + n = n / 10; + } + ft_strrev(&ret, neg); + return (ret); +} diff --git a/conv/ft_itox.c b/conv/ft_itox.c new file mode 100644 index 0000000..2493aa4 --- /dev/null +++ b/conv/ft_itox.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itox.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/12/21 09:51:26 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itox(unsigned long int n, const char *base) +{ + char *ret; + size_t i; + unsigned int neg; + size_t size; + + size = ft_longbaselen(n, 16); + if (n == 0) + return (ft_strdup("0")); + i = 0; + neg = 0; + ret = ft_calloc(size + 1, sizeof(char)); + while (n) + { + ret[i++] = base[n % 16]; + n = n / 16; + } + ft_strrev(&ret, neg); + return (ret); +} diff --git a/conv/ft_tolower.c b/conv/ft_tolower.c new file mode 100755 index 0000000..a0bf08f --- /dev/null +++ b/conv/ft_tolower.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 17:02:25 by narnaud #+# #+# */ +/* Updated: 2021/10/19 12:35:58 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_tolower(int c) +{ + if (c > 64 && c < 91) + return (c + 32); + else + return (c); +} diff --git a/conv/ft_toupper.c b/conv/ft_toupper.c new file mode 100755 index 0000000..7256704 --- /dev/null +++ b/conv/ft_toupper.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 17:02:28 by narnaud #+# #+# */ +/* Updated: 2021/10/19 12:36:28 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_toupper(int c) +{ + if (c > 96 && c < 123) + return (c - 32); + else + return (c); +} diff --git a/conv/ft_utoa.c b/conv/ft_utoa.c new file mode 100644 index 0000000..9bd0255 --- /dev/null +++ b/conv/ft_utoa.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_utoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/12/21 09:48:38 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_utoa(unsigned int n) +{ + char *ret; + unsigned int i; + + if (n == 4294967295) + return (ft_strdup("4294967295")); + if (n == 0) + return (ft_strdup("0")); + i = 0; + ret = ft_calloc(ft_ulen(n) + 1, sizeof(char)); + while (n) + { + ret[i++] = (n % 10) + '0'; + n = n / 10; + } + ft_strrev(&ret, 0); + return (ret); +} diff --git a/is/ft_isalnum.c b/is/ft_isalnum.c new file mode 100755 index 0000000..8547c8e --- /dev/null +++ b/is/ft_isalnum.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:13:39 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isalnum(int ch) +{ + if (ft_isalpha(ch) || ft_isdigit(ch)) + return (1); + else + return (0); +} diff --git a/is/ft_isalpha.c b/is/ft_isalpha.c new file mode 100755 index 0000000..2eec041 --- /dev/null +++ b/is/ft_isalpha.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 15:38:41 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isalpha(int ch) +{ + if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) + return (1); + else + return (0); +} diff --git a/is/ft_isascii.c b/is/ft_isascii.c new file mode 100755 index 0000000..f090f58 --- /dev/null +++ b/is/ft_isascii.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:14:38 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isascii(int ch) +{ + if (ch >= 0 && ch < 128) + return (1); + else + return (0); +} diff --git a/is/ft_isdigit.c b/is/ft_isdigit.c new file mode 100755 index 0000000..68b9071 --- /dev/null +++ b/is/ft_isdigit.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:13:16 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isdigit(int ch) +{ + if (ch >= '0' && ch <= '9') + return (1); + else + return (0); +} diff --git a/is/ft_islower.c b/is/ft_islower.c new file mode 100644 index 0000000..178d93d --- /dev/null +++ b/is/ft_islower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_islower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/03/24 10:04:18 by narnaud #+# #+# */ +/* Updated: 2022/03/24 10:07:46 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_islower(char c) +{ + if (c >= 'a' && c <= 'z') + return (1); + return (0); +} diff --git a/is/ft_isprint.c b/is/ft_isprint.c new file mode 100755 index 0000000..b9fbcb6 --- /dev/null +++ b/is/ft_isprint.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:14:02 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isprint(int ch) +{ + if (ch > 31 && ch < 127) + return (1); + else + return (0); +} diff --git a/is/ft_isspace.c b/is/ft_isspace.c new file mode 100644 index 0000000..9cbbcba --- /dev/null +++ b/is/ft_isspace.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isspace.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/03/24 10:05:51 by narnaud #+# #+# */ +/* Updated: 2022/03/24 10:06:15 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isspace(char c) +{ + if (c > 8 && c < 14) + return (1); + if (c == ' ') + return (1); + return (0); +} diff --git a/is/ft_isupper.c b/is/ft_isupper.c new file mode 100644 index 0000000..20035e7 --- /dev/null +++ b/is/ft_isupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/03/24 10:06:18 by narnaud #+# #+# */ +/* Updated: 2022/03/24 10:07:15 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isupper(char c) +{ + if (c >= 'A' && c <= 'Z') + return (1); + return (0); +} diff --git a/lst/ft_lstadd_back.c b/lst/ft_lstadd_back.c new file mode 100755 index 0000000..34db8fa --- /dev/null +++ b/lst/ft_lstadd_back.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:51:11 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstadd_back(t_list **alst, t_list *new) +{ + t_list *i_cell; + + if (!alst || !new) + return ; + if (*alst) + { + i_cell = ft_lstlast(*alst); + i_cell->next = new; + } + else + *alst = new; +} diff --git a/lst/ft_lstadd_front.c b/lst/ft_lstadd_front.c new file mode 100755 index 0000000..6b98704 --- /dev/null +++ b/lst/ft_lstadd_front.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:48:11 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:48 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstadd_front(t_list **alst, t_list *new) +{ + if (!alst || !new) + return ; + if (*alst) + new->next = *alst; + *alst = new; +} diff --git a/lst/ft_lstclear.c b/lst/ft_lstclear.c new file mode 100755 index 0000000..5265738 --- /dev/null +++ b/lst/ft_lstclear.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:53:04 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + t_list *next_cell; + + if (!del) + return ; + while (lst && *lst) + { + next_cell = (*lst)->next; + ft_lstdelone(*lst, del); + *lst = next_cell; + } +} diff --git a/lst/ft_lstdelone.c b/lst/ft_lstdelone.c new file mode 100755 index 0000000..21b556f --- /dev/null +++ b/lst/ft_lstdelone.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:51:53 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + if (!lst || !del) + return ; + (*del)(lst->content); + free(lst); + lst = NULL; +} diff --git a/lst/ft_lstiter.c b/lst/ft_lstiter.c new file mode 100755 index 0000000..426182c --- /dev/null +++ b/lst/ft_lstiter.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:54:03 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!lst || !f) + return ; + (*f)(lst->content); + if (lst->next) + ft_lstiter(lst->next, f); +} diff --git a/lst/ft_lstlast.c b/lst/ft_lstlast.c new file mode 100755 index 0000000..e7cdbf0 --- /dev/null +++ b/lst/ft_lstlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:50:21 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (!lst) + return (NULL); + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/lst/ft_lstmap.c b/lst/ft_lstmap.c new file mode 100755 index 0000000..aee025c --- /dev/null +++ b/lst/ft_lstmap.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:54:31 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new_lst; + + if (!lst || !f) + return (NULL); + new_lst = ft_lstnew((*f)(lst->content)); + if (!new_lst) + { + ft_lstclear(&new_lst, del); + return (NULL); + } + new_lst->next = ft_lstmap(lst->next, f, del); + return (new_lst); +} diff --git a/lst/ft_lstnew.c b/lst/ft_lstnew.c new file mode 100755 index 0000000..1ed7040 --- /dev/null +++ b/lst/ft_lstnew.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 17:36:09 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *i_cell; + + i_cell = (t_list *)malloc(sizeof(*i_cell)); + if (!i_cell) + return (NULL); + i_cell->content = content; + i_cell->next = NULL; + return (i_cell); +} diff --git a/lst/ft_lstsize.c b/lst/ft_lstsize.c new file mode 100755 index 0000000..195acf7 --- /dev/null +++ b/lst/ft_lstsize.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 14:49:32 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_lstsize(t_list *lst) +{ + size_t lst_size; + + lst_size = 0; + while (lst && ++lst_size) + lst = lst->next; + return (lst_size); +} diff --git a/mem/ft_bzero.c b/mem/ft_bzero.c new file mode 100755 index 0000000..b50e529 --- /dev/null +++ b/mem/ft_bzero.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/19 11:46:58 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_bzero(void *s, size_t n) +{ + size_t i; + + i = 0; + while (i < n) + *(char *)(s + i++) = 0; +} diff --git a/mem/ft_calloc.c b/mem/ft_calloc.c new file mode 100755 index 0000000..eb3416d --- /dev/null +++ b/mem/ft_calloc.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/19 14:11:11 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_calloc(size_t count, size_t size) +{ + void *ret; + + ret = malloc(count * size); + if (!ret) + return (NULL); + ft_bzero(ret, count * size); + return (ret); +} diff --git a/mem/ft_memchr.c b/mem/ft_memchr.c new file mode 100755 index 0000000..e71f7ea --- /dev/null +++ b/mem/ft_memchr.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:15:55 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memchr(const void *b, int c, size_t n) +{ + size_t i; + + i = 0; + while (i < n) + { + if (*(unsigned char *)(b + i) == (unsigned char)c) + return ((void *)(b + i)); + i++; + } + return (NULL); +} diff --git a/mem/ft_memcmp.c b/mem/ft_memcmp.c new file mode 100755 index 0000000..cb0f221 --- /dev/null +++ b/mem/ft_memcmp.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:16:23 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + size_t i; + int diff; + + i = 0; + while (i < n) + { + diff = *(unsigned char *)(s1 + i) - *(unsigned char *)(s2 + i); + if (diff) + return (diff); + i++; + } + return (0); +} diff --git a/mem/ft_memcpy.c b/mem/ft_memcpy.c new file mode 100755 index 0000000..9411f0b --- /dev/null +++ b/mem/ft_memcpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:16:47 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + size_t i; + + i = 0; + if (!src && !dst) + return (NULL); + while (i < n) + { + *(char *)(dst + i) = *(char *)(src + i); + i++; + } + return (dst); +} diff --git a/mem/ft_memmove.c b/mem/ft_memmove.c new file mode 100755 index 0000000..6dce9e4 --- /dev/null +++ b/mem/ft_memmove.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:17:21 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memmove(void *dst, const void *src, size_t n) +{ + size_t i; + unsigned char *ptr_dst; + unsigned char *ptr_src; + + ptr_dst = (unsigned char *)dst; + ptr_src = (unsigned char *)src; + i = 0; + if (!dst && !src) + return (NULL); + if (ptr_src < ptr_dst) + while (++i <= n) + ptr_dst[n - i] = ptr_src[n - i]; + else + while (n--) + *(ptr_dst++) = *(ptr_src++); + return (dst); +} diff --git a/mem/ft_memset.c b/mem/ft_memset.c new file mode 100755 index 0000000..dfbcd47 --- /dev/null +++ b/mem/ft_memset.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/19 11:43:44 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memset(void *b, int c, size_t len) +{ + size_t i; + + i = 0; + while (i < len) + *(unsigned char *)(b + i++) = (unsigned char)c; + return ((void *)b); +} diff --git a/nbr/ft_nbrlen.c b/nbr/ft_nbrlen.c new file mode 100644 index 0000000..c8dc375 --- /dev/null +++ b/nbr/ft_nbrlen.c @@ -0,0 +1,50 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_nbrlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/12/21 09:42:43 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +size_t ft_ilen(int nbr) +{ + size_t i; + + i = 0; + if (nbr == 0) + return (1); + else if (nbr < 0) + i++; + while (nbr && ++i) + nbr = nbr / 10; + return (i); +} + +size_t ft_ulen(unsigned int nbr) +{ + size_t i; + + i = 0; + while (nbr && ++i) + nbr = nbr / 10; + return (i); +} + +size_t ft_longbaselen(long nbr, size_t base) +{ + size_t i; + + if (nbr <= 0) + i = 1; + else + i = 0; + while (nbr && ++i) + nbr = nbr / base; + return (i); +} diff --git a/put/ft_putchar_fd.c b/put/ft_putchar_fd.c new file mode 100755 index 0000000..0942182 --- /dev/null +++ b/put/ft_putchar_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 16:32:52 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putchar_fd(char c, int fd) +{ + write(fd, &c, 1); +} diff --git a/put/ft_putendl_fd.c b/put/ft_putendl_fd.c new file mode 100755 index 0000000..2f8a80f --- /dev/null +++ b/put/ft_putendl_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:11:11 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + if (!s) + return ; + ft_putstr_fd(s, fd); + ft_putchar_fd('\n', fd); +} diff --git a/put/ft_putnbr_fd.c b/put/ft_putnbr_fd.c new file mode 100755 index 0000000..90a4708 --- /dev/null +++ b/put/ft_putnbr_fd.c @@ -0,0 +1,61 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:12:01 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +static size_t get_nbrlength(int nbr) +{ + size_t i; + + i = 0; + if (nbr == 0) + return (1); + while (nbr && ++i) + nbr = nbr / 10; + return (i); +} + +static int pow_10(size_t n) +{ + int ret; + + if (!n) + return (1); + ret = 10; + while (--n) + ret *= 10; + return (ret); +} + +void ft_putnbr_fd(int n, int fd) +{ + int fact; + + if (n == -2147483648) + { + ft_putstr_fd("-2147483648", fd); + return ; + } + if (n < 0) + { + ft_putchar_fd('-', fd); + n = -n; + } + fact = pow_10(get_nbrlength(n) - 1); + while (fact >= 10) + { + ft_putchar_fd(n / fact + '0', fd); + n = n % fact; + fact /= 10; + } + ft_putchar_fd(n + '0', fd); +} diff --git a/put/ft_putstr_fd.c b/put/ft_putstr_fd.c new file mode 100755 index 0000000..f45914a --- /dev/null +++ b/put/ft_putstr_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/22 15:10:39 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + if (!s) + return ; + while (*s) + ft_putchar_fd(*(s++), fd); +} diff --git a/str/ft_split.c b/str/ft_split.c new file mode 100755 index 0000000..8c39fd3 --- /dev/null +++ b/str/ft_split.c @@ -0,0 +1,103 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 15:43:48 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +static int ft_strlen_to(char const *str, int i, char ch, int lf_not) +{ + if (!str[i]) + return (i); + if ((!lf_not && str[i] == ch) || (lf_not && !(str[i] == ch))) + return (i); + return (ft_strlen_to(str, ++i, ch, lf_not)); +} + +static int goto_cur_word(char const *str, char ch, int *words_len, int j_word) +{ + int i_word; + int i; + + i_word = 0; + i = 0; + i += ft_strlen_to(str, i, ch, 1) - i; + while (i_word < j_word) + { + i += words_len[i_word++]; + i += ft_strlen_to(str, i, ch, 1) - i; + } + return (i); +} + +static char *ft_get_word(char const *str, char ch, int *words_len, int j_word) +{ + int i; + int j; + char *output; + + output = ft_calloc((words_len[j_word] + 1), sizeof(char)); + if (output == NULL) + return (output); + i = goto_cur_word(str, ch, words_len, j_word); + j = 0; + while (j < words_len[j_word]) + { + i += ft_strlen_to(str, i, ch, 1) - i; + output[j] = str[i + j]; + j++; + } + output[j] = '\0'; + return (output); +} + +int get_words_len(int **words_len, char const *str, char ch) +{ + int i; + int strlen; + int words_count; + + i = 0; + words_count = 0; + strlen = ft_strlen_to(str, 0, '\0', 0); + while (i < strlen) + { + (*words_len)[words_count] = ft_strlen_to(str, i, ch, 0) - i; + i += (*words_len)[words_count] + 1; + if ((*words_len)[words_count] && ++words_count) + (*words_len)[words_count] = 0; + } + return (words_count); +} + +char **ft_split(char const *str, char ch) +{ + int i; + int words_count; + int *words_len; + char **output; + + if (!str) + return (NULL); + i = -1; + words_len = ft_calloc(200, sizeof(int)); + if (!words_len) + return (NULL); + words_count = get_words_len(&words_len, str, ch); + output = ft_calloc(words_count + 1, sizeof(char *)); + if (!output) + return (NULL); + i = -1; + while (++i < words_count) + output[i] = ft_get_word(str, ch, words_len, i); + output[i] = NULL; + free(words_len); + return (output); +} diff --git a/str/ft_strchr.c b/str/ft_strchr.c new file mode 100755 index 0000000..57c6afe --- /dev/null +++ b/str/ft_strchr.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 16:21:06 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strchr(const char *s, int c) +{ + size_t i; + + i = 0; + while (s[i] || c == '\0') + { + if (s[i] == (c % 256)) + return ((char *)(s + i)); + i++; + } + return (0); +} diff --git a/str/ft_strdup.c b/str/ft_strdup.c new file mode 100755 index 0000000..f86186b --- /dev/null +++ b/str/ft_strdup.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/19 14:07:50 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strdup(const char *src) +{ + char *dup; + size_t i; + + i = 0; + dup = malloc((ft_strlen(src) + 1) * sizeof(char)); + if (!dup) + return (NULL); + while (src[i]) + { + dup[i] = src[i]; + i++; + } + dup[i] = '\0'; + return (dup); +} diff --git a/str/ft_striteri.c b/str/ft_striteri.c new file mode 100755 index 0000000..10f1382 --- /dev/null +++ b/str/ft_striteri.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 16:23:41 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + unsigned int i; + + i = 0; + if (!s || !f) + return ; + while (s[i]) + { + f(i, s + i); + i++; + } +} diff --git a/str/ft_strjoin.c b/str/ft_strjoin.c new file mode 100755 index 0000000..f744609 --- /dev/null +++ b/str/ft_strjoin.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 06:49:25 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strjoin(const char *s1, const char *s2) +{ + char *ret; + size_t i; + size_t j; + + if (!s1 || !s2) + return (NULL); + ret = malloc(ft_strlen(s1) + ft_strlen(s2) + 1); + if (ret == NULL) + return (NULL); + i = 0; + while (s1[i]) + { + ret[i] = s1[i]; + i++; + } + j = 0; + while (s2[j]) + { + ret[i] = s2[j]; + i++; + j++; + } + ret[i] = '\0'; + return (ret); +} diff --git a/str/ft_strlcat.c b/str/ft_strlcat.c new file mode 100755 index 0000000..46c41f0 --- /dev/null +++ b/str/ft_strlcat.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 16:13:02 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t dstsize) +{ + size_t i; + size_t j; + + i = 0; + j = 0; + while (dst[i]) + i++; + while (dstsize && i + j < dstsize - 1 && src[j]) + { + dst[i + j] = src[j]; + j++; + } + if (dstsize) + dst[i + j] = '\0'; + while (src[j]) + j++; + if (i > dstsize) + return (dstsize + j); + else + return (i + j); +} diff --git a/str/ft_strlcpy.c b/str/ft_strlcpy.c new file mode 100755 index 0000000..d60ecab --- /dev/null +++ b/str/ft_strlcpy.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 16:08:31 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +size_t ft_strlcpy(char *dst, const char *src, size_t dstsize) +{ + size_t i; + + i = 0; + while (dstsize && i < dstsize - 1 && src[i]) + { + dst[i] = src[i]; + i++; + } + if (dstsize) + dst[i] = '\0'; + while (src[i]) + i++; + return (i); +} diff --git a/str/ft_strlen.c b/str/ft_strlen.c new file mode 100755 index 0000000..8e753e7 --- /dev/null +++ b/str/ft_strlen.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 16:04:47 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +size_t ft_strlen(const char *s) +{ + size_t i; + + i = 0; + while (s[i] != '\0') + { + i++; + } + return (i); +} diff --git a/str/ft_strmapi.c b/str/ft_strmapi.c new file mode 100755 index 0000000..95694a2 --- /dev/null +++ b/str/ft_strmapi.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 16:12:32 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + unsigned int i; + char *ret; + + if (!s) + return (NULL); + ret = (char *)ft_calloc(ft_strlen(s) + 1, sizeof(char)); + if (!ret) + return (NULL); + i = 0; + while (s[i]) + { + ret[i] = (*f)(i, s[i]); + i++; + } + return (ret); +} diff --git a/str/ft_strncmp.c b/str/ft_strncmp.c new file mode 100755 index 0000000..73d1ff6 --- /dev/null +++ b/str/ft_strncmp.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 16:16:37 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t i; + int ret; + unsigned char *s1cp; + unsigned char *s2cp; + + if (!n) + return (0); + i = 0; + s1cp = (unsigned char *)s1; + s2cp = (unsigned char *)s2; + ret = s1cp[i] - s2cp[i]; + while ((!ret && i < n) && (s1[i] || s2[i])) + { + ret = s1cp[i] - s2cp[i]; + i++; + } + return (ret); +} diff --git a/str/ft_strnstr.c b/str/ft_strnstr.c new file mode 100755 index 0000000..a5c2430 --- /dev/null +++ b/str/ft_strnstr.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 16:52:56 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strnstr(const char *haystack, const char *needle, size_t len) +{ + size_t i; + size_t j; + int found; + + i = 0; + j = 0; + found = 0; + while (haystack[i] && i < len && needle[j]) + { + if (haystack[i] == needle[j]) + { + found = 1; + j++; + } + else if (found) + { + found = 0; + i -= j; + j = 0; + } + i++; + } + if (!needle[j]) + return ((char *)(haystack + i - j)); + return (0); +} diff --git a/str/ft_strrchr.c b/str/ft_strrchr.c new file mode 100755 index 0000000..137cc23 --- /dev/null +++ b/str/ft_strrchr.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/18 16:47:21 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strrchr(const char *s, int c) +{ + size_t i; + int found; + + i = 0; + found = -1; + while (s[i]) + { + if (s[i] == (c % 256)) + found = i; + i++; + } + if (c == '\0') + return ((char *)(s + i)); + if (found >= 0) + return ((char *)(s + found)); + return (0); +} diff --git a/str/ft_strrev.c b/str/ft_strrev.c new file mode 100644 index 0000000..7e9cd0c --- /dev/null +++ b/str/ft_strrev.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrev.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/27 09:36:21 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_strrev(char **str, unsigned int neg) +{ + char ch; + size_t size; + size_t i; + + size = ft_strlen(*str); + if (neg) + (*str)[size++] = '-'; + i = 0; + while (i < size / 2) + { + ch = (*str)[i]; + (*str)[i] = (*str)[size - i - 1]; + (*str)[size - i - 1] = ch; + i++; + } +} diff --git a/str/ft_strtrim.c b/str/ft_strtrim.c new file mode 100755 index 0000000..6acfd2d --- /dev/null +++ b/str/ft_strtrim.c @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 13:49:37 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +static int ft_search_char(char c, char const *set) +{ + size_t i; + size_t set_len; + + if (!c) + return (0); + i = 0; + set_len = ft_strlen(set); + while (i < set_len) + if (c == set[i++]) + return (1); + return (0); +} + +char *ft_strtrim(char const *s1, char const *set) +{ + unsigned int i; + unsigned int b_out; + unsigned int e_out; + char *ret; + + if (!s1) + return (NULL); + i = 0; + b_out = 0; + e_out = ft_strlen(s1); + while (ft_search_char(s1[b_out], set)) + b_out++; + while (e_out > b_out && ft_search_char(s1[e_out - 1], set)) + e_out--; + ret = malloc((e_out - b_out + 1) * sizeof(char)); + if (!ret) + return (NULL); + while (b_out < e_out) + ret[i++] = s1[b_out++]; + ret[i] = '\0'; + return (ret); +} diff --git a/str/ft_substr.c b/str/ft_substr.c new file mode 100755 index 0000000..532a8cb --- /dev/null +++ b/str/ft_substr.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: narnaud +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/10/20 06:45:32 by narnaud #+# #+# */ +/* Updated: 2022/03/24 09:22:49 by narnaud ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + size_t i; + char *ret; + size_t s_size; + + if (!s) + return (NULL); + s_size = ft_strlen(s); + if (start > s_size) + { + start = s_size; + len = 0; + } + else if (s_size < start + len) + len = s_size - start; + ret = ft_calloc(len + 1, sizeof(char)); + if (!ret) + return (NULL); + i = 0; + while (i < len && s[start + i]) + { + ret[i] = s[start + i]; + i++; + } + ret[i] = '\0'; + return (ret); +}