Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 지베르니
- 42 so_long
- 알고리즘 기초
- 포르투갈 여행
- 이지젯
- get next line
- ft_printf
- so_long
- 지베르니 가을
- pipex
- 서울42
- pipex 42
- 파리 피크닉
- 와인 고르기
- printf
- 지베르니 계절 추천
- ecole42
- 와인선별방법
- get_next_line
- 에꼴42
- 42 pipex
- 굿노트 스티커
- 42
- str함수
- gnl
- push swap 설명
- 지베르니 여름
- push swap
- 42 libft
- libft
Archives
- Today
- Total
뇌 마음 반반저장소
[42_libft] Part 2 (itoa) 본문
728x90
1-5. ft_itoa
itoa란?
Parameters : 매개 변수
n: the integer to convert.
n: 변환할 정수입니다.
Return value : 반환 값
The string representing the integer. NULL if the allocation fails.
정수를 나타내는 문자열입니다. 할당에 실패하면 NULL입니다.
External functs. : 외부 기능
malloc
Description : 설명
Allocates (with malloc(3)) and returns a string representing the integer received as an argument. Negative numbers must be handled.
malloc(3)을 사용하여 할당하고 인수로 받은 정수를 나타내는 문자열을 반환합니다. 음수는 처리해야 합니다.
함수 선언 원형
char *ft_itoa(int n);
이 함수는 원형에서 보듯이 정수를 문자로 바꿔주는 기능이다. 음수는 처리해야 된다는 게 무슨 말이냐. (깡패냐 깡패)
일단 문자를 변환할때 int사이즈의 n을 long long사이즈의 nb로 변환해야 한다. 그 이유는!
int의 MIN 사이즈는 -2147483648 이다. 하지만 실제로 유효한 숫자는 여기서 -1을 뺀 숫자다. 그래서 INT_MIN도 숫자로 구현하고 싶다면 int보다 사이즈 범위가 높은 long long을 사용해 주어야 한다.
1. 먼저 이 숫자가 몇 개로 이루어졌는지 구한다.
atoi에서 10을 나눠준 것처럼 10으로 계속 나누면서 숫자를 구한다. 단 음수는 일단 건너뛰고!
int ft_nbrlen(long nb)
{
int len;
len = 0;
if (nb < 0)
{
nb *= -1;
len++;
}
while (nb > 0)
{
nb /= 10;
len++;
}
return (len);
}
2. 구한 크기와 마지막 널문자를 계산해서 힙 영역에 동적 할당을 해주고,
i = ft_nbrlen(n);
if (!(str = (char*)malloc(sizeof(char) * (i + 1))))
return (NULL);
str[i--] = '\0';
3. 만약에 숫자가 0이면 바로 0 문자로 리턴해주고
if (n == 0)
{
str[0] = '0';
return (str);
}
4. 만약 음수라면 첫 번째에 -를 써준다.
if (n < 0)
{
str[0] = '-';
n *= -1;
}
5. 그리고 마지막 숫자부터 숫자를 차례로 넣어준다.
while (n > 0) // n이 365라면,
{
str[i] = (n % 10) + '0'; //5를 먼저 i에 쓰고
n /= 10; //n은 36이된다.
i--; //i는 앞으로 자리를 땡긴다.
} // 5 i-- 6 i-- 3 i-- => 365!
!테스트 메인!
int main()
{
printf("%s\n", ft_itoa(-789));
return 0;
}
사용한 함수
1. 숫자의 길이를 구하기 위한 함수
2. 영역을 할당해주기 위한 malloc
!테스트 결과!
-789
수정 : ft_pritnf 중에 itoa를 구현하며 2022.12.16
도움을 주고 싶으신 내용이나
틀린 내용이 있다면 댓글로 남겨주시고,
참고하신다면 꼭 출처를 밝혀주세요!
도움이 되었다면 공감 한 번씩 부탁드립니다❤️
728x90
'42 > libft' 카테고리의 다른 글
[42_libft] Part 2 (put 함수들과 fd) (0) | 2022.12.15 |
---|---|
[42_libft] Part 2 (strmapi, striteri 함수포인터 알아보기) (0) | 2022.12.14 |
[42_libft] Part 2 (split 자세한 설명) (1) | 2022.12.12 |
[42_libft] Part 2 (strtrim) (0) | 2022.12.11 |
[42_libft] Part 2 (substr, strjoin) (0) | 2022.12.11 |
Comments