ft_atoi

J_JEON·2022년 1월 11일
0

libft

목록 보기
15/44

💻 ft_atoi

문자열을 입력받아 정수로 바꾸어주는 함수 (ascii to integer)

📃 ft_atoi 원형

int	ft_atoi(const char *str)

🔩 parameters

*str : 받아오는 문자열

📬 return

int형 반환

  • 문자열을 받아 해당 문자열이 정수라면 정수로 바꾸어서 반환해줌

🧨 주의사항

  • 받아오는 문자열의 앞쪽에있는 whitespace들은 모두 생략해줌
  • int자료형 크기를 초과하는 숫자는 제대로 변환되지 않음
    (ascii to int이기 때문, long으로 바꿔주는 strtol함수가 따로 있음)
  • 부호뒤에 숫자가아닌 다른것이 있다면 0으로 출력
  • 숫자 이후 숫자가아닌 다른것이 있다면 이전 숫자까지만 변환됨
  • 먼저 문자열 앞쪽의 whitespace수 만큼 인덱스를 건너뛰어준 뒤 해당하는 인덱스자리의 부호를 검사함,
    이후 숫자가 나오면 지금까지의 값에 10을 곱하여 자릿수를 계산해주고 현재 인덱스자리에 해당하는 숫자를 더해줌 그리고 더이상 숫자가 나오지않을 때 까지 정수를 구해준뒤 부호를 곱해주고 반환해줌.

⌨ 코드


#include "libft.h"

int	check_whitespace(const char *str)
{
	int	i;

	i = 0;
	while ((str[i] >= 9 && str[i] <= 13) || str[i] == ' ')
	{
		i++;
	}
	return (i);
}

int	ft_atoi(const char *str)
{
	int	i;
	int	num;
	int	pm;

	num = 0;
	pm = 1;
	i = check_whitespace(str);
	if (str[i] == '-' || str[i] == '+')
	{
		if (str[i] == '-')
			pm *= -1;
		i++;
	}
	while (str[i] != '\0')
	{
		if (str[i] >= 48 && str[i] <= 57)
		{
			num *= 10;
			num += (int)(str[i] - 48);
		}
		else
			break ;
		i++;
	}
	return (pm * num);
}

profile
늅늅

0개의 댓글