프로그래밍 언어/C, C++

[C/C++] atoi 구현 / 문자열을 숫자로

sujo 2021. 4. 18. 17:29

atoi 구현 / 문자열을 숫자로

 

atoi 기본 개념 및 구조

#include <stdlib.h>에 내장된 함수인 atoi는 문자열을 숫자로 바꿔주는 함수이다.

atoi의 구조는 아래와 같다.

 

1. 문자열의 초반에 오는 공백 문자(white-space characters)는 무시한다.

- whitespace : \t, \v, \n, \f, \r, ' '

- 아스키코드로는 9부터 13까지, ' '는 32

- man isspace 명령어를 사용해보자(리눅스 한정)

 

2. 부호(+, -)는 최대 한 개까지만 올 수 있다.

- 만일, 두 개 이상이라면 0이 반환된다.

- 부호가 없다면 기본 양수이다.

 

3. 숫자를 한번 읽기 시작한다면 다른 문자가 오기 직전까지만 읽는다.

- ex) 1234 → 1234

- ex) 12a34 → 12

- 이때 다른 문자란 '0' ~ '9'를 제외한 모든 문자이다.

 

 

atoi 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int ft_atoi(char* str) {
    int result, positive;
 
    result = 0;
    positive = 1;
    while (( 9 <= *str && *str <= 13|| *str == ' '
        str++;
    if (*str == '+' || *str == '-') {
        if (*str == '-')
            positive = -1;
        str++;
    }
    while ('0' <= *str && *str <= '9') {
        result *= 10;
        result += (*str - '0'* positive;
        str++;
    }
    return result;
}
cs

 

  • line 6 ~ line 7 : whitespace(공백) 검사
  • line 8 ~ line 12 : 부호 검사
  • line 13 ~ line 17 : 숫자변환