piscine-c07/ex03/ft_strjoin.c

101 lines
2.4 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strjoin.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: tosuman </var/spool/mail/tosuman> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/03/30 20:50:21 by tosuman #+# #+# */
/* Updated: 2023/03/30 20:50:21 by tosuman ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdlib.h>
#include <stdio.h>
int ft_strlen(char *str)
{
int size;
size = 0;
while (*str++)
++size;
return (size);
}
char *ft_strcat(char *dest, char *src)
{
char *orig_s1;
orig_s1 = dest;
while (*dest)
++dest;
while (*src)
*dest++ = *src++;
*dest = 0;
return (orig_s1);
}
char *ft_strjoin(int size, char **strs, char *sep)
{
int total_len;
int sep_len;
int idx;
char *joined_str;
total_len = 0;
sep_len = ft_strlen(sep);
idx = -1;
while (++idx < size)
total_len += ft_strlen(strs[idx]) + sep_len;
total_len -= sep_len;
if (total_len < 1)
joined_str = malloc(sizeof(char) * 1);
else
joined_str = malloc(sizeof(char) * (total_len + 1));
idx = -1;
joined_str[0] = 0;
while (++idx < size)
{
ft_strcat(joined_str, strs[idx]);
if (idx < size - 1)
ft_strcat(joined_str, sep);
}
return (joined_str);
}
/* ////
#include <stdio.h>
int main(void)
{
char **strs;
char *sep;
int size;
char *result;
size = 5;
// sep = "<DELIM>";
sep = "";
strs = malloc(sizeof(char*) * size);
strs[0] = "First";
strs[1] = "Second";
strs[2] = "Third";
strs[3] = "Fourth";
strs[4] = "Fifth";
printf("strs size: '%d'\n", size);
printf("The delim: '%s'\n", sep);
printf("strs[0]: '%s'\n", strs[0]);
printf("strs[1]: '%s'\n", strs[1]);
printf("strs[2]: '%s'\n", strs[2]);
printf("strs[3]: '%s'\n", strs[3]);
printf("strs[4]: '%s'\n", strs[4]);
result = ft_strjoin(size, strs, sep);
printf("The concatenated string: '%s'\n", result);
printf("Length of that string: %d\n", ft_strlen(result));
free(result);
free(strs);
return (0);
}
*/ ////