문자열을 입력받아 정수로 바꾸어주는 함수 (ascii to integer)
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);
}