ft_atoi 구현

yeonjkim·2021년 5월 21일
0

42seoul-libft

목록 보기
1/43

1. ft_atoi 용도

* ascii to integer.
* 문자를 입력받아 숫자로 전환하는 함수.

2. ft_atoi 프로토타입

int	ft_atoi(char const *str)

3. 구현 시 유의사항

* 공백이 먼저 들어올 수 있기 때문에 공백을 제거해야 함.
* 공백 이후 -와 +를 제외한 문자가 오면 바로 지금까지의 문자를 숫자로 바꾼 것을 리턴해야 함.
	- ex) 2145ao235 --> 2145
* '-'부호가 올 때에는 음수가 리턴된다는 점 주의.

4. 코드 구현

#include "libft.h"

static int      ft_isspace(char c)
{
        if (c == '\n' || c == '\t' || c == '\f' || c == '\r' || c == '\v' ||
        c == ' ')
        {
                return (1);
        }
        return (0);
}

static void     ft_deletespace(char const *str, int *index)
{
        while (ft_isspace(str[*index]) == 1)
                (*index)++;
}

int                     ft_atoi(char const *str)
{
        int                     res;
        int                     index;
        int                     minus;
        int                     middle;

        res = 0;
        index = 0;
        minus = 1;
        middle = 1;
        ft_deletespace(str, &index);
        if (str[index] == '-')
        {
                minus = -1;
                index++;
        }
        else if (str[index] == '+')
                index++;
        while (str[index] != '\0')
        {
                if (!(str[index] >= '0' && str[index] <= '9'))
                        break ;
                middle = str[index++] - '0';
                res = res * 10 + middle;
        }
        return (res * minus);
}

5. 코드 구현 방법

  • ft_isspace : 문자 c를 인자로 받아 c가 공백인지 확인하는 함수

  • ft_deletespace : str과 index를 인자로 받아 index가 공백이 아닌 문자를 가리키도록(공백일 때까지 index++) 하는 함수

  • ft_atoi : ft_deletespace 함수를 통해 공백을 제거하고, -문자가 오면 minus 변수에 -1저장. str[index]값이 0부터 9사이가 아닐 시 반복문을 탈출하고 res * minus 리턴.

6. 코드 구현 시 어려웠던 점

  • ft_atoi에서 str인자의 처음 부분에 공백이 있어도 되었던 점.
  • 유효하지 않은 문자('0'부터 '9'가 아닌 문자)가 올 시에 지금까지의 문자를 숫자로 변환한 값 리턴한다는 점.

0개의 댓글