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 : 숫자변환
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[C언어] chdir 사용법 (0) | 2022.02.09 |
---|---|
[C언어] GNU readline 사용법 (1) | 2022.01.18 |
[C언어] 문자열을 숫자로, 숫자를 문자열로 (0) | 2021.01.27 |
[C언어] 배열, 구조체의 원소 개수 구하기 / sizeof 사용법 (0) | 2020.11.13 |
[C/C++] 최대공약수 구하기 (0) | 2020.10.31 |