열렬히.뛰기

ft_itoa

école 42 > libft > ft_itoa

개요

  • 숫자 → 문자열

주의할 점 & 구현

  • 0과 int 최솟값을 조심할 필요가 있음.
  • 기존에 사용했던 함수; ft_strdup을 응용

구조는 다음과 같다.

  1. 0 → ft_strdup()으로 0 나오게 도출
  2. int 최솟값 → ft_strdup()으로 나오게 도출
  3. 숫자의 크기를 반환하는 함수 find_size() 도출 → 음수 / 양수 케이스 분리
  4. (음수인 경우) 미리 - 채우기
  5. 숫자 대입 → put() 함수 사용

코드

c
#include "libft.h"

char	*ft_strdup(char *src);

static int	find_size(long long n)
{
	int	size;

	size = 0;
	if (n <= 0)
	{
		size++;
		n = -n;
	}
	while (n > 0)
	{
		size++;
		n /= 10;
	}
	return (size);
}

static char	*put(char *newarr, int n, int size)
{
	newarr[size--] = '\0';
	while (n > 0)
	{
		newarr[size--] = (n % 10) + '0';
		n /= 10;
	}
	return (newarr);
}

char	*ft_itoa(int n)
{
	int		size;
	char	*newarr;

	if (n == 0)
		return (ft_strdup("0"));
	else if (n == -2147483648)
		return (ft_strdup("-2147483648"));
	size = find_size((long long) n);
	newarr = (char *)malloc((size + 1) * sizeof(char));
	if (!newarr)
		return (0);
	if (n < 0)
	{
		newarr[0] = '-';
		n *= -1;
	}
	return (put(newarr, n, size));
}