ft_atoi

nawkim·2021년 5월 26일
0

libft

목록 보기
8/44

1. 프로토타입

int	ft_atoi(const char *str)
  • 헤더
#include <stdlib.h>
  • 형태
int	atoi(const char *str)
  • const char *str
    문자열 str의 값 변경 불가능.(ex.
    str = "asdf"처럼 문자열 값 변경은 불가능.)
    포인터만 변경 가능.(ex. str++처럼 포인터 값 변경은 가능.)

2. 용도 & 설명

  • 입력받은 문자열을 int형으로 변환.

  • 공백 + 부호 + 숫자문자 순서만 가능하다. 숫자문자를 제외한 다른 문자가 있으면 그 전까지만 int형으로 변환하여 반환한다.
    (ex. " -2352adg34" --> -2352임.)
    (ex. " +asd123" --> 공백, 부호, 숫자 순서가 아니기 때문에 변환할 수 없음. 따라서 0을 반환함.)

  • 부호는 + 또는 - 하나만 들어갈 수 있다.(+ 또는 - 가 없을 수도 있다.)

3. 리턴값

입력받은 문자열을 int형으로 변환하여 반환.
함수가 입력을 int형의 값으로 변환할 수 없는 경우 0을 반환.
리턴값은 오버플로의 경우 정의되지 않는다.

4. 코드 구현

int	ft_atoi(const char *str)
{
	int	t;
	int	minus;
	int	result;

	t = 0;
	minus = 1;
	result = 0;
	while (str[t] == '\t' || str[t] == '\n' || str[t] == '\v' ||
				str[t] == '\f' || str[t] == '\r' || str[t] == ' ')
		t++;
	if (str[t] == '-' || str[t] == '+')
	{
		if (str[t] == '-')
			minus *= -1;
		t++;
	}
	while (str[t] >= '0' && str[t] <= '9')
	{
		result *= 10;
		result += str[t] - '0';
		t++;
	}
	return (result * minus);
}

5. 코드 설명

  • t 는 index, minus는 부호, result는 int로 변환한 결과값에 해당한다.
  1. 공백일때 계속 while문을 돌려준다. 이때 공백이 아닌 다른 문자를 만나면 while문이 종료된다.

  2. 공백이 아닌 다른 문자를 만났을 때 그때의 부호를 판단해 준다. 만약 부호가 - 라면 minus * (-1)을 해 준다.

  3. str이 '0' ~ '9' 일때만 while문을 돌려서 result값을 구해준다. 숫자문자가 아닌 다른 문자가 나오면 자동으로 while문이 종료된다.

  4. result 값에 minus 를 곱해서 부호를 정해 준 후 그 값을 반환한다.

6. 느낀점

  • " +-++-123" 일때는 변환이 안되는 건지 헷갈렸다.
    (부호가 여러개이면 변환이 안되고 0값이 반환된다.)
  • 공백문자가 6가지나 된다는 것을 알게 되었다.
profile
공부 기록.

0개의 댓글