aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-04-05 14:05:43 +0200
committerCharles <sircharlesaze@gmail.com>2020-04-05 14:05:43 +0200
commit3a2d19df9e509d0b015c786eb02f8315ff0ad91c (patch)
treea34390a35e366a46897c1261bb091f20b7fd8b09
parent944a236443bacf531085b346d06907b24e3739b1 (diff)
downloadlibft-3a2d19df9e509d0b015c786eb02f8315ff0ad91c.tar.gz
libft-3a2d19df9e509d0b015c786eb02f8315ff0ad91c.tar.bz2
libft-3a2d19df9e509d0b015c786eb02f8315ff0ad91c.zip
Renamed ft_substr to ft_strsub, Added ft_strsubf, ft_strcat3
-rw-r--r--include/libft_str.h6
-rw-r--r--src/str/ft_strcat3.c26
-rw-r--r--src/str/ft_strsub.c (renamed from src/str/ft_substr.c)27
-rw-r--r--src/str/ft_strsubf.c30
-rw-r--r--src/str/ft_strtrim.c4
-rw-r--r--test/src/main.c2
-rw-r--r--test/src/runner/test_runner_str.c10
-rw-r--r--test/src/str/test_ft_strsub.c54
-rw-r--r--test/src/str/test_ft_strsubf.c61
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));
+}