/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_ultimate_range.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jayang <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/13 08:49:55 by jayang #+# #+# */
/* Updated: 2022/02/13 09:17:19 by jayang ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdlib.h>
int ft_strlen(char *strs)
{
int len;
len = 0;
while (*(strs + len))
len++;
return (len);
}
void my_strcmp(char *sub, char **strs, int i, int *j)
{
char *c_strs;
c_strs = strs[i];
while (*strs[i])
{
sub[*j] = *strs[i];
(strs[i])++;
(*j)++;
}
*(strs + i) = c_strs;
}
char *my_strcat(char *sub, char **strs, char *sep, int size)
{
int i;
int j;
char *c_sep;
i = 0;
j = 0;
c_sep = sep; // 원본 주소 저장
while (i < size)
{
my_strcmp(sub, strs, i, &j); // strs 문자열을 차례대로 삽입
sep = c_sep; // 변경된 sep에 원본 주소를 주기적으로 다시 넣어줌
if (i == size - 1) // 마지막엔 sep 문자열 삽입하지 않고 끝냄.
break ;
while (*sep)
{
sub[j] = *sep;
sep++;
j++;
}
i++;
}
sub[j] = '\\0';
return (sub);
}
char *ft_strjoin(int size, char **strs, char *sep)
{
char *sub;
int len_strs;
int total;
int i;
i = 0;
len_strs = 0;
if (size <= 0)
{
sub = (char *)malloc(sizeof (char));
*sub = 0;
return (sub); // free 함수로 해제 가능하도록 null 값을 넣은 배열 주소 전달
}
while (i < size)
{
len_strs += ft_strlen(*(strs + i)); // strs에게 있는 모든 문자열 길이 체크
i++;
}
total = len_strs + ft_strlen(sep) * (size - 1) + 1; // null 값 추가
sub = (char *)malloc(sizeof (char) * total); // strs + sep * (size - 1) + 1 배열 할당
if (!sub)
return (0);
sub = my_strcat(sub, strs, sep, size); // 문자열 붙이기
return (sub);
}