diff options
| -rw-r--r-- | include/libft_str.h | 6 | ||||
| -rw-r--r-- | src/str/ft_strcat3.c | 26 | ||||
| -rw-r--r-- | src/str/ft_strsub.c (renamed from src/str/ft_substr.c) | 27 | ||||
| -rw-r--r-- | src/str/ft_strsubf.c | 30 | ||||
| -rw-r--r-- | src/str/ft_strtrim.c | 4 | ||||
| -rw-r--r-- | test/src/main.c | 2 | ||||
| -rw-r--r-- | test/src/runner/test_runner_str.c | 10 | ||||
| -rw-r--r-- | test/src/str/test_ft_strsub.c | 54 | ||||
| -rw-r--r-- | test/src/str/test_ft_strsubf.c | 61 |
9 files changed, 209 insertions, 11 deletions
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 <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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_substr.c b/src/str/ft_strsub.c index ad9c706..77bffb2 100644 --- a/src/str/ft_substr.c +++ b/src/str/ft_strsub.c @@ -1,26 +1,39 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_substr.c :+: :+: :+: */ +/* ft_strsub.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/10/17 08:28:49 by cacharle #+# #+# */ -/* Updated: 2020/02/14 03:44:42 by cacharle ### ########.fr */ +/* Updated: 2020/04/05 13:47:55 by charles ### ########.fr */ /* */ /* ************************************************************************** */ -#include "libft.h" +#include "libft_str.h" -char *ft_substr(char const *s, unsigned int start, size_t len) +/* +** \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; + 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); - if (start > ft_strlen(s)) - return (sub); + 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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 <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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/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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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)); +} |
