뇌 마음 반반저장소

[42_libft] Part 2 (strtrim) 본문

42/libft

[42_libft] Part 2 (strtrim)

맹진저 2022. 12. 11. 23:15
728x90

 1-3. ft_strtrim

strtrim이란? (사실 프랑스에서는 제모용품을 살 때 많이 봐서 이 단어를 알고 있었다.. ㅋㅋㅋ)

Parameters : 매개 변수
s1: The string to be trimmed.
s1: 잘라낼 문자열입니다.
set: The reference set of characters to trim.
set: 자를 문자의 참조 집합입니다.

Return value : 반환값
The trimmed string. NULL if the allocation fails.
다듬어진 문자열입니다. 할당에 실패하면 NULL입니다.

External functs. : 외부 기능
malloc

Description : 설명
Allocates (with malloc(3)) and returns a copy of ’s1’ with the characters specified in ’set’ removed from the beginning and the end of the string.
malloc(3)을 사용하여 문자열의 시작과 끝에서 'set'에 지정된 문자가 제거된 's1'의 복사본을 할당하고 반환합니다.

위의 설명과 다른 블로그들을 찾아봐도 잘 모르겠어서 외국 사이트를 뒤져봤다. strtrim은 공백 문자를 지워주는 함수이다. 하지만 우리는 특정 문자를 지우는 함수로 사용한다.

 

가장 헷갈리는 것은 만약 set문자에 123이 있다면 123으로 연결된 문자열을 찾는 것인지 1, 2, 3 개별적으로 문자를 찾아서 삭제하는 것인지 궁금했다. 결론은 후자. set에 들어간 모든 값을 개별적으로 삭제해 준다.

 

그렇다면 내가 생각한 작문은 이것이다.

1. 처음부터 문자를 훑을 때 set에 있는 문자가 있으면 그냥 넘기고,

2. 만약에 set에 있는 문자가 아니라면 그대로 새로운 저장공간에 복사한다.

 

이렇게 코딩을 해보니 아주 잘 작동했다. 하지만 문제가 있었으니. 바로 새로운 문자열에 동적 할당을 필요한 만큼만 해줘야 한다는 것이다. 그래서 보안한 것이

1. 먼저 set문자를 모두 찾는다. 

2. 전체 길이에서 set문자 길이를 빼주고 널문자 1을 더한 동적 할당 장소를 만든다.

 

이렇게 했더니 또 아주 잘 작동했다. 하지만 또 문제가 생겼다. 바로 25줄을 넘어버린다는 것이었다.

그래서 set길이를 구하는 것을 따로 static 함수로 위에 빼서 만들었다. 후후..

 

함수 선언 원형

char	*ft_strtrim(char const *s1, char const *set);

!테스트 메인!

int main()
{
	printf("before trim : 11abc23defg33\n");
	printf("trim letter : 123\n");    
	printf("%s\n\n", ft_strtrim("11abc23defg33", "123"));

	printf("before trim : aa123bcb4567cc\n");
	printf("trim letter : abc\n");    
	printf("%s\n", ft_strtrim("aa123bcb4567cc", "abc"));
	return 0;
}

사용한 함수

1. ft_strlen : 총문자열의 길이를 구했다.

2. ft_strchr : 아주 유용하게 사용되었다. set문자열에 s1[i] 문자가 들어있는지 계속 확인했다.

3. ft_strdup : 무의미한 리턴 값을 널문자와 함께 전달했다.

4. malloc : 메모리를 빌렸다.

 

!테스트 결과!

$ ./main.out
before trim : 11abc23defg33
trim letter : 123
abcdefg

before trim : aa123bcb4567cc
trim letter : abc
1234567

 

도움을 주고 싶으신 내용이나

틀린 내용이 있다면 댓글로 남겨주시고,

참고하신다면 꼭 출처를 밝혀주세요!

 

도움이 되었다면 공감 한 번씩 부탁드립니다❤️

728x90
Comments