티스토리 뷰
틀린 내용이나 지식이 있다면 댓글로 알려주세요! 감사합니다 :)
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);
}
📕 reference :
728x90
반응형
'TIL(Today I Learn) > C++' 카테고리의 다른 글
lst함수들에 대해서(lstnew, lstadd_front, lstadd_back, lst_size) (2) | 2021.01.17 |
---|---|
fd 출력함수들에 대해서 (putchar, putstr, putendl, putnbr) (0) | 2021.01.14 |
is함수들 구현 (isalpha, isdigit, isascii, isalnum, isspace) (0) | 2021.01.07 |
strchr, strnstr, strncmp 함수 구현 (0) | 2021.01.07 |
strlen, strlcpy, strlcat 함수 구현(2021.01.07 업데이트) (21) | 2021.01.03 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 42서울
- C언어 문제
- vscode
- 프로그래머스 자바
- flexbox
- 42서울 합격 후기
- git vi
- JS
- 프로그래머스 코딩테스트
- 마크다운 이미지 업로드
- 백준
- C언어문제
- 42seoul
- 알고리즘
- JavaScript
- React
- windows 10 ubuntu
- 프로그래머스 코테
- 자바스크립트
- HEXO
- c언어 함수
- html
- C언어
- c언어알고리즘
- 42서울 라피신
- 프로그래머스 카카오
- 42서울 합격
- vscode commit vi
- Git
- css
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함