ft_itoa

one·2021년 1월 28일
0

✅itoa

  • Allocates (with malloc(3)) and returns a string
    representing the integer received as an argument.
    Negative numbers must be handled.
  • 정수 -> 문자열 변환

💾Prototype

char *ft_itoa(int n);

💻Parameters

  • n : the integer to convert.

💻Return value

  • The string representing the integer. NULL if the
    allocation fails.

💾Code

ver.1

#include "libft.h"

size_t				get_len(int n)
{
	size_t	len;

	if (n == 0)
		return (1);
	len = 0;
	if (n < 0)
		len++;
	while (n)
	{
		n /= 10;
		len++;
	}
	return (len);
}

char* ft_itoa(int n)
{
	size_t	len;
	size_t	i;
	char* result;

	len = get_len(n);
	if (!(result = (char*)malloc(len + 1)))
		return (NULL);
	result[len] = '\0';
	if (n < 0)
	{
		result[0] = '-';
		i = 1;
	}
	else
		i = 0;
	while (len-- > i)
		if (n < 0)
		{
			result[len] = '0' + n % 10 * (-1);
			n = n / 10;
		}
		else
		{
			result[len] = '0' + n % 10;
			n = n / 10;
		}
	return (result);
}

ver.2

#include "libft.h"

size_t		ft_nb_len(int nb)
{
	int len;

	len = 0;
	if (nb <= 0)
		len++;
	while (nb)
	{
		len++;
		nb = nb / 10;
	}
	return (len);
}

char		*ft_itoa(int n)
{
	int		len;
	char	*str;
	long	nb;

	len = ft_nb_len(n);
	nb = n;
	if (!(str = malloc(sizeof(char) * len + 1)))
		return (NULL);
	if (nb < 0)
	{
		str[0] = '-';
		nb = -nb;
	}
	if (nb == 0)
		str[0] = '0';
	str[len--] = '\0';
	while (nb)
	{
		str[len] = nb % 10 + '0';
		len--;
		nb = nb / 10;
	}
	return (str);
}

💾Example

int main()
{
	printf("%s\n", ft_itoa(0));
	printf("%s\n", ft_itoa(987654321));
	printf("%s\n", ft_itoa(-123456789));
}

profile
늘 호기심을 갖고, 새로운 것에 도전할 것.

0개의 댓글