티스토리 뷰

728x90
반응형

틀린 내용이나 지식이 있다면 댓글로 알려주세요! 감사합니다 :)
2021.03.03 reference 사이트 링크 오류 수정!

 

💡 atoi에 대하여

환경

  • c, c++

  • c에서는 <stdlib.h>

  • c++에서는 <cstdlib>

 

Prototype

int atoi(const char* str);
  • str : 정수로 바꿀 문자열

 

atoi 목적

  • 문자열을 정수로 변환한다.

  • C 형식 문자열을 정수로 변환하여 변환된 값을 리턴한다 C 형식 문자열을 정수로 변환하여 변환된 값을 리턴한다.

  • 이 함수는 C 형식 문자열에서 비-공백 문자가 나오기 전 까지 최대한 많은 공백 문자(' ', '\t', \n') 들을 무시한다. 그 다음에 첫 번째 비-공백 문자부터 최대한 많은 숫자들을 수로 변환한다. 이 때, 숫자의 맨 앞부분에는 +- 가 올 수 도 있다. 숫자들 다음에 나타나는 문자들은 모두 무시된다. 예를 들면

    "\n\n-123aaa"

    이라는 문자열이 있다면 -123 으로 변환된다. 만일 문자열에서 첫 번째로 나타나는 비-공백 문자가 숫자 혹은 +- 가 아니라면 어떠한 변환도 이루어 지지 않는다. 또한 문자열이 공백 문자로만 이루어져 있어도 변환이 이루어 지지 않는다.

  • 공백문자는링크된 아스키코드표를 참조 (하늘색의 색깔) (9 ~ 13, 32번이 공백문자임을 알 수 있다.)

 

Return Value

  • 성공적으로 변환을 하였다면 int 값을 리턴한다. 만일 변환을 실패하였다면 0 이 리턴된다.

  • 만일 변환을 하였지만 그 값이 표현 가능한 범위를 벗어난다면 INT_MAX 혹은 INT_MIN 이 리턴된다.

  •  

atoi 함수의 구현

#include <string.h> //NULL과 size_t를 쓰기 위한 헤더
int        ft_isspace(const char *str)    //공백문자인 문자를 skip해주는 함수
{
    int i;

    i = 0;
    while ((str[i] >= 9 && str[i] <= 13) || (str[i] == 32))
        i++;
    return (i); //공백문자를 지나간 i번째를 return해준다.
}

int                    ft_isdigit(int c);    //c가 '0'~'9'면 1, 아니면 0
{
    if (c >= '0' && c <= '9')
        return (1);
    return (0);   
}

int        ft_atoi(const char *str)
{
    int sign;
    int i;
    int res;

    sign = 1;
    i = ft_isspace(str);
    res = 0;
    if (str[i] == '-' || str[i] == '+')    // -이거나 + 인경우
        sign = (str[i++] == '-') ? -1 : 1;    // '-'(true)라면 -1, '+'(false)라면 1을 sign에 저장
    while (ft_isdigit(str[i]))    //문자가 숫자 0~9라면 1을 반환
        res = (res * 10) + (str[i++] - '0');    //594라면 res에 594가 저장이 된다.
    return (sign * res);
}

isdigit, isspace에 관련된 내용



 

📕 reference :

c언어 도장 문자열을 정수로

atoi에 대하여 - 모두의 코딩

 

 

728x90
반응형
댓글