➰ 코딩 부트캠프/42 seoul

[0 Circle] Libft - ft_itoa, ft_strmapi

 사과개발자 2021. 1. 4. 22:14

📌ft_itoa

정수를 문자열로 변환

char *ft_itoa(int n);

➕ 매개변수 (Parameters)

  • n : 문자열로 변환할 정수

➕ 반환값 (Return)

  • char * : 변환된 문자열 주소 반환

➕ 설명 (Description)

  • 저는 처음에 이 함수를 재귀를 사용해서 코드를 짰더니 무리넷 검사에서 memleak 이 발생하였습니다. (그래서 배열을 이용하여 푸는 방법으로 수정하였습니다!)

➕ 코드 (Code)

#include "libft.h"

static char    *ft_handle_zero(void)
{
    char    *ptr;

    if (!(ptr = (char *)ft_calloc(2, sizeof(char))))
        return (NULL);
    ptr[0] = '0';
    return (ptr);
}

char        *ft_itoa(int n)
{
    char    *ptr;
    char    buf[20];
    int        tmp;
    int        len;

    if (n == 0)
        return (ft_handle_zero());
    tmp = n;
    len = 0;
    while (tmp)
    {
        buf[len] = (tmp % 10 > 0) ? (tmp % 10) + '0' : -(tmp % 10) + '0';
        tmp /= 10;
        len++;
    }
    if (n < 0)
        len++;
    if (!(ptr = (char *)ft_calloc(len + 1, sizeof(char))))
        return (NULL);
    tmp = (n < 0) ? 0 : -1;
    ptr[0] = (n < 0) ? '-' : ptr[0];
    while ((++tmp) < len)
        ptr[tmp] = buf[len - 1 - tmp];
    return (ptr);
}

📌ft_strmapi

str의 각 문자들을 f함수에 저장시켜 새로운 문자열 만들어 반환하기

char *ft_strmapi(char const *s, char (*f)(unsigned int, char));

➕ 매개변수 (Parameters)

  • s : 원본 문자열
  • f : 적용시킬 함수

➕ 반환값 (Return)

  • char * : f 함수를 통해 변환된 문자열 반환

➕ 설명 (Description)

➕ 코드 (Code)

#include "libft.h"

char        *ft_strmapi(char const *s, char (*f)(unsigned int, char))
{
    char    *temp;
    int        i;

    i = 0;
    if (!s || !f)
        return (0);
    if (!(temp = malloc(ft_strlen(s) + 1)))
        return (0);
    while (s[i])
    {
        temp[i] = f(i, s[i]);
        i++;
    }
    temp[i] = '\0';
    return (temp);
}
반응형