/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   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);
}