ft_itoa - chanhl22/libft GitHub Wiki
13 #include "libft.h"
14
15 int length_of_int(int num)
16 {
17 int len;
18
19 len = (num <= 0) ? 1 : 0; //num๊ฐ ์์์ผ๋์ ์์์ผ๋ -์ ๋ฐฐ์ด์ ์๊ฐํด์ผํ๋ค. ์์๋ฉด ํ์นธ ๋ ํ์
20 while (num != 0) //0์ด ์๋๋๊น์ง, ์์ ์์๋ผ์ ๋ถ๋ฑํธ๋ ์๋
21 {
22 num = num / 10;
23 len++;
24 }
25 return (len);
26 }
27
28 int ft_abs(int num) //์์์ผ๋๋ ๋ชจ๋๋ฌ ๊ณ์ฐ์ด ์์์ด๋ฏ๋ก ์ ๋๊ฐ์ ์์์ผํจ
29 {
30 return ((num < 0) ? -num : num);
31 }
32
33 char *ft_itoa(int n)
34 {
35 char *str;
36 int len;
37 int sign;
38
39 len = length_of_int(n);
40 if (!(str = (char*)malloc(sizeof(char) * (len + 1)))) //str์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ๊ธธ์ด๋ ๋ฐ๋ n์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๊ตฌํด์ผํจ
41 return (NULL);
42 str[len] = '\0'; //๋ฌธ์์ด์ด๋๊น ๋น์ฐํ NULL์ถ๊ฐ
43 len--; //์ถ๊ฐํ ๋ฌธ์์ด ์์์ ๋ถํฐ ํ๋์ฉ ๋๋ฆฌ๊ธฐ ์ํ -1
44 sign = (n < 0) ? -1 : 1; //๋ถํธ ์๊ฐ
45 while (len >= 0) //len์ ๋ฐ๋ผ์ ๋ฐฐ์ด์ ๋ฃ์ด์ค์ผํจ, 3์๋ฆฌ๋ฉด ์์๋ฉด 3์นธ ์์๋ฉด 4์นธ
46 {
47 str[len] = ft_abs(n % 10) + '0'; //ํ๋์ฉ ๋ฃ์ด์ค (์ ๋๊ฐ ํ์)
48 n = ft_abs(n / 10); //n๊ฐ๋ ๋ฐ๊ฟ
49 len--;
50 }
51 if (sign == -1)
52 str[0] = '-'; ////์์๋ผ๋ฉด ๋ง์ง๋ง์ 0์นธ์ ๋ฃ์ด์ค์ผํจ, ์ญ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ๋์๊ธฐ ๋๋ฌธ
53 return (str);
54 }