* 인자로 받은 문자열 s의 각 요소에 f함수를 적용한 값들로 새로운 하나의 문자열 만들고 문자열의 주소값을 반환하는 함수
* allowed function : malloc
char *ft_strmapi(char const *s, char (*f)(unsigned int, char))
char const *s : f를 적용할 문자열 s
char (*f)(unsigned int, char) : s에 적용할 함수 포인터 f.
f는 인자로 unsigned int와 char을 받음. f의 리턴형은 char *, 문자열.
일차원 배열을 먼저 할당하고 그 배열에 s의 요소들에 f함수를 적용한 것을 차례대로 넣는다.
만든 문자열의 가장 끝에는 '\0'문자가 들어 있어야 한다.
할당 실패 시 NULL을 반환한다.
#include "libft.h"
char *ft_strmapi(char const *s, char (*f)(unsigned int, char))
{
unsigned int len;
char *str;
unsigned int index;
index = 0;
str = NULL;
len = (unsigned int)(ft_strlen(s));
if (!(str = (char*)malloc(sizeof(char) * (len + 1))))
{
return (NULL);
}
while (index < len)
{
str[index] = f(index, s[index]);
index++;
}
str[index] = '\0';
return (str);
}
(1) 할당 할 사이즈을 알기 위해 s의 길이를 ft_strlen()을 통해 len에 저장한다.
(2) str에 len + 1('\0' 포함)만큼을 할당하고, 만약 할당에 실패하면 NULL을 반환한다.
(3) index가 0일 때부터, len까지 str[index]에 f(index, s[index])를 한 값을 넣는다.
(4) 마지막에 '\0'을 넣고 str을 반환한다.