ft_substr

jen133·2022년 1월 15일
0

libft

목록 보기
24/44

💻 ft_substr

문자열 s의 start번째 자리부터 len만큼을 잘라서 반환해주는 함수

📃 ft_substr 원형

char	*ft_substr(char const *s, unsigned int start, size_t len)

🔩 parameters

*s : 자를 원본 문자열
start : 문자열을 자르기 시작할 위치
len : 문자열을 잘라낼 크기

📬 return

char *형 반환

  • start가 s의 길이보다 크다면 \0이 들어간 저장공간을 반환
  • 문자열을 잘라냈다면 끝에 \0을 넣고 해당 문자열을 반환, 단 malloc으로 저장공간을 할당해주어야함

🧨 주의사항

  • ft_strcheck함수는 문자열 s의 길이보다 start의 값이 더 크다면 \0값이 들어있는 저장공간을 할당한 뒤 반환해줌
  • lencheck함수는 잘라서 완성할 문자열의 길이를 확인하는 함수로 s의길이에서 start만큼의 길이를 빼줬을 때 len의 길이가 더 길다면 s - start를 리턴해주고 len이 더 짧다면 len을 리턴해준다
  • 자른 문자열은 malloc으로 저장공간을 할당해서 리턴해주어야하고 문자열의 끝에는 \0이 들어가야한다
  • malloc할당실패시 NULL을 반환하여 함수를 끝내주어야함

⌨ 코드


#include "libft.h"

char	*ft_startcheck(void)
{
	char	*rtv;

	rtv = malloc(sizeof(char));
	if (rtv == 0)
		return (NULL);
	rtv[0] = '\0';
	return (rtv);
}

int	lencheck(char const *s, unsigned int start, size_t len)
{
	if ((ft_strlen(s) - start) < len)
		return ((ft_strlen(s) - start));
	else
		return (len);
}

char	*ft_substr(char const *s, unsigned int start, size_t len)
{
	size_t	i;
	size_t	j;
	char	*sub;

	i = 0;
	j = 0;
	if (ft_strlen(s) < start)
		return (ft_startcheck());
	sub = (char *)malloc(sizeof(char) * (lencheck(s, start, len) + 1));
	if (sub == 0)
		return (NULL);
	while (s[i])
	{
		if (i >= start && j < len)
		{
			sub[j] = s[i];
			j++;
		}
		i++;
	}
	sub[j] = '\0';
	return (sub);
}

profile
늅늅

0개의 댓글