From 3a2d19df9e509d0b015c786eb02f8315ff0ad91c Mon Sep 17 00:00:00 2001 From: Charles Date: Sun, 5 Apr 2020 14:05:43 +0200 Subject: Renamed ft_substr to ft_strsub, Added ft_strsubf, ft_strcat3 --- include/libft_str.h | 6 ++-- src/str/ft_strcat3.c | 26 +++++++++++++++++ src/str/ft_strsub.c | 39 +++++++++++++++++++++++++ src/str/ft_strsubf.c | 30 +++++++++++++++++++ src/str/ft_strtrim.c | 4 +-- src/str/ft_substr.c | 26 ----------------- test/src/main.c | 2 ++ test/src/runner/test_runner_str.c | 10 +++++++ test/src/str/test_ft_strsub.c | 54 ++++++++++++++++++++++++++++++++++ test/src/str/test_ft_strsubf.c | 61 +++++++++++++++++++++++++++++++++++++++ 10 files changed, 228 insertions(+), 30 deletions(-) create mode 100644 src/str/ft_strcat3.c create mode 100644 src/str/ft_strsub.c create mode 100644 src/str/ft_strsubf.c delete mode 100644 src/str/ft_substr.c create mode 100644 test/src/str/test_ft_strsub.c create mode 100644 test/src/str/test_ft_strsubf.c diff --git a/include/libft_str.h b/include/libft_str.h index 2b105bf..195e750 100644 --- a/include/libft_str.h +++ b/include/libft_str.h @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/31 10:39:22 by cacharle #+# #+# */ -/* Updated: 2020/04/04 14:41:46 by charles ### ########.fr */ +/* Updated: 2020/04/05 13:52:10 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -52,7 +52,8 @@ int ft_atoi(const char *nptr); void ft_striter(char *s, void (*f)(char *)); void ft_striteri(char *s, void (*f)(unsigned int, char *)); -char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strsub(char const *s, size_t start, size_t len); +char *ft_strsubf(char const *s, size_t start, size_t len); char *ft_strjoin(char const *s1, char const *s2); char *ft_strjoin3(char const *s1, char const *s2, char const *s3); char *ft_strjoinf(char const *s1, char const *s2, t_ftstrjoinf_tag tag); @@ -75,6 +76,7 @@ int ft_strequ(char const *s1, char const *s2); int ft_strnequ(char const *s1, char const *s2, size_t n); char *ft_strtolower(char *s); char *ft_strtoupper(char *s); +char *ft_strcat3(char *dest, const char *src1, const char *src2); /* ** glob diff --git a/src/str/ft_strcat3.c b/src/str/ft_strcat3.c new file mode 100644 index 0000000..1f7c5df --- /dev/null +++ b/src/str/ft_strcat3.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcat3.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/05 12:53:05 by charles #+# #+# */ +/* Updated: 2020/04/05 12:55:49 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_str.h" + +/* +** \brief Wrapper around ft_strcat to concatenate 3 strings +** \param dest Destination of the concatenation +** \param src1 First concatenation +** \param src2 Second concatenation +** \return Pointer to destination +*/ + +char *ft_strcat3(char *dest, const char *src1, const char *src2) +{ + return (ft_strcat(ft_strcat(dest, src1), src2)); +} diff --git a/src/str/ft_strsub.c b/src/str/ft_strsub.c new file mode 100644 index 0000000..77bffb2 --- /dev/null +++ b/src/str/ft_strsub.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/10/17 08:28:49 by cacharle #+# #+# */ +/* Updated: 2020/04/05 13:47:55 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_str.h" + +/* +** \brief Extract a substring from a string +** \param s String to extract from +** \param start Starting index of the substring +** \param len Substring length +** \return The created substring or NULL on error +*/ + +char *ft_strsub(char const *s, size_t start, size_t len) +{ + char *sub; + size_t s_len; + + if (s == NULL) + return (NULL); + s_len = ft_strlen(s); + if (start > s_len) + return (NULL); + if (start + len > s_len) + len = s_len - start; + if ((sub = (char*)malloc(sizeof(char) * (len + 1))) == NULL) + return (NULL); + sub[len] = '\0'; + return (ft_strncpy(sub, s + start, len)); +} diff --git a/src/str/ft_strsubf.c b/src/str/ft_strsubf.c new file mode 100644 index 0000000..dc49ba5 --- /dev/null +++ b/src/str/ft_strsubf.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsubf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/05 13:48:13 by charles #+# #+# */ +/* Updated: 2020/04/05 13:51:47 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_str.h" + +/* +** \brief Wrapper around ft_substr which free the original string +** \param s String to extract from (will be free) +** \param start Starting index of the substring +** \param len Substring length +** \return The created substring or NULL on error +*/ + +char *ft_strsubf(char const *s, size_t start, size_t len) +{ + char *ret; + + ret = ft_strsub(s, start, len); + free((void*)s); + return (ret); +} diff --git a/src/str/ft_strtrim.c b/src/str/ft_strtrim.c index aa48826..fa9b192 100644 --- a/src/str/ft_strtrim.c +++ b/src/str/ft_strtrim.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/10/07 10:24:16 by cacharle #+# #+# */ -/* Updated: 2019/11/20 03:52:58 by cacharle ### ########.fr */ +/* Updated: 2020/04/05 13:50:43 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,5 +27,5 @@ char *ft_strtrim(char const *s1, char const *set) while (s1[start + len - 1] && ft_strchr(set, s1[start + len - 1]) != NULL) len--; - return (ft_substr(s1, start, len)); + return (ft_strsub(s1, start, len)); } diff --git a/src/str/ft_substr.c b/src/str/ft_substr.c deleted file mode 100644 index ad9c706..0000000 --- a/src/str/ft_substr.c +++ /dev/null @@ -1,26 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_substr.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: cacharle +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2019/10/17 08:28:49 by cacharle #+# #+# */ -/* Updated: 2020/02/14 03:44:42 by cacharle ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -char *ft_substr(char const *s, unsigned int start, size_t len) -{ - char *sub; - - if (s == NULL) - return (NULL); - if ((sub = (char*)malloc(sizeof(char) * (len + 1))) == NULL) - return (NULL); - if (start > ft_strlen(s)) - return (sub); - return (ft_strncpy(sub, s + start, len)); -} diff --git a/test/src/main.c b/test/src/main.c index ea2865b..e962577 100644 --- a/test/src/main.c +++ b/test/src/main.c @@ -32,6 +32,8 @@ static void run_all_test(void) RUN_TEST_GROUP(ft_fnmatch); RUN_TEST_GROUP(ft_strsjoin); RUN_TEST_GROUP(ft_strsjoinf); + RUN_TEST_GROUP(ft_strsub); + RUN_TEST_GROUP(ft_strsubf); // ht RUN_TEST_GROUP(ft_htentry_new); diff --git a/test/src/runner/test_runner_str.c b/test/src/runner/test_runner_str.c index a6c0da8..8d3b68a 100644 --- a/test/src/runner/test_runner_str.c +++ b/test/src/runner/test_runner_str.c @@ -19,3 +19,13 @@ TEST_GROUP_RUNNER(ft_strsjoinf) { RUN_TEST_CASE(ft_strsjoinf, basic); } + +TEST_GROUP_RUNNER(ft_strsub) +{ + RUN_TEST_CASE(ft_strsub, basic); +} + +TEST_GROUP_RUNNER(ft_strsubf) +{ + RUN_TEST_CASE(ft_strsubf, basic); +} diff --git a/test/src/str/test_ft_strsub.c b/test/src/str/test_ft_strsub.c new file mode 100644 index 0000000..91ab4d3 --- /dev/null +++ b/test/src/str/test_ft_strsub.c @@ -0,0 +1,54 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* test_ft_strsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/01 19:41:59 by charles #+# #+# */ +/* Updated: 2020/04/05 14:02:11 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_test.h" + +TEST_GROUP(ft_strsub); + +TEST_SETUP(ft_strsub) +{} + +TEST_TEAR_DOWN(ft_strsub) +{} + +TEST(ft_strsub, basic) +{ + char *s = "[test]"; + char *ret; + + ret = ft_strsub(s, 0, strlen(s)); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("[test]", ret); + free(ret); + + ret = ft_strsub(s, 1, strlen(s) - 2); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("test", ret); + free(ret); + + ret = ft_strsub(s, strlen(s) - 4, 100); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("est]", ret); + free(ret); + + ret = ft_strsub(s, 3, 100); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("st]", ret); + free(ret); + + ret = ft_strsub(s, strlen(s), 100); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("", ret); + free(ret); + + TEST_ASSERT_NULL(ft_strsub(s, strlen(s) + 1, 1)); +} diff --git a/test/src/str/test_ft_strsubf.c b/test/src/str/test_ft_strsubf.c new file mode 100644 index 0000000..827c849 --- /dev/null +++ b/test/src/str/test_ft_strsubf.c @@ -0,0 +1,61 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* test_ft_strsubf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/01 19:41:59 by charles #+# #+# */ +/* Updated: 2020/04/05 14:03:20 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_test.h" + +TEST_GROUP(ft_strsubf); + +TEST_SETUP(ft_strsubf) +{} + +TEST_TEAR_DOWN(ft_strsubf) +{} + +TEST(ft_strsubf, basic) +{ + char *orig = "[test]"; + char *s; + char *ret; + + s = strdup(orig); + ret = ft_strsub(s, 0, strlen(s)); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("[test]", ret); + free(ret); + + s = strdup(orig); + ret = ft_strsub(s, 1, strlen(s) - 2); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("test", ret); + free(ret); + + s = strdup(orig); + ret = ft_strsub(s, strlen(s) - 4, 100); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("est]", ret); + free(ret); + + s = strdup(orig); + ret = ft_strsub(s, 3, 100); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("st]", ret); + free(ret); + + s = strdup(orig); + ret = ft_strsub(s, strlen(s), 100); + TEST_ASSERT_NOT_NULL(ret); + TEST_ASSERT_EQUAL_STRING("", ret); + free(ret); + + s = strdup(orig); + TEST_ASSERT_NULL(ft_strsub(s, strlen(s) + 1, 1)); +} -- cgit