본문 바로가기

프로그래밍/C

[library] strjoin 구현하기

📌 매뉴얼 (in subject)

더보기

Function name

     do_strjoin

 

Prototype

     char *do_strjoin(char const *s1, char const *s2);

 

Parameters

     s1: The prefix string. s2: The suffix string.

: s1은 접두사 문자열, s2는 접미사 문자열

 

Return value

     The new string. NULL if the allocation fails.

: 새 문자열. 할당에 실패하면 NULL입니다.

 

External functs

     malloc

 

Description

     Allocates (with malloc(3)) and returns a new string, which is the result of the concatenation of ’s1’ and ’s2’.

: malloc을 사용하여 할당하고 's1'과 's2'의 연결 결과인 새 문자열을 반환

 

📌 작성 코드

char	*do_strjoin(char const *s1, char const *s2)
{
	char	*s3;
	size_t	i;
	size_t	k;

	i = 0;
	k = 0;
	if (!s1 || !s2)
		return (NULL);
	s3 = (char *)malloc(sizeof(char) * (do_strlen(s1) + do_strlen(s2) + 1));
	if (s3 == NULL)
		return (NULL);
	while (i < do_strlen(s1))
	{
		s3[i] = s1[i];
		i ++;
	}
	while (i < do_strlen(s1) + do_strlen(s2))
	{
		s3[i] = s2[k];
		i ++;
		k ++;
	}
	s3[i] = '\0';
	return (s3);
}

 

📌 코드 리뷰

strjoin이라는 함수는 string join, 즉 문자열을 합쳐주어 반환하는 작업을 한다.

이 함수는 매개로 받아오는 s1, s2를 합쳐서 새로운 s3으로 반환하게 되는데,

s1과 s2는 원본을 건드리지 않고, s3에 문자열을 복사해서 넣어주기만 한다.

 

새로운 문자열 s3을 만들기 때문에, 동적할당이 필요하고, 길이는 s1과 s2의 길이를 합친 것에 \0이 들어갈 공간만

할당해주면 된다. 따라서 strlen으로 구한 s1과 s2의 길이에 1을 더한 것으로 malloc 동적할당 해준다.

 

while문 첫번째는 s1을 우선 복사해서 붙혀준다.

그리고 while문 두번째는 이미 s1을 다 넣어주고 이동한 인덱스 i부터, 합쳐질 문자열의 길이까지 s2를 복사해 넣는다.

여기서 k라는 새 인덱스를 사용해 s2의 첫번째부터 넣어주는 방식을 취했다.

(또는 i 인덱스만 이용하여, {i - s1의 길이} 를 k 대신 넣는 것도 괜찮은 방식일 것 같다.)

 

역시나 마지막에는 '\0' 을 넣어주면서 문자열을 끝내고 만들어진 s3을 반환하면 함수가 종료된다.

새로운 문자열을 만드는 과정이므로, 꼭 이후에 main문이나 이를 사용하는 함수에서 free를 해주는 것을 잊지 말기!

'프로그래밍 > C' 카테고리의 다른 글

[library] split 구현하기  (0) 2024.06.29
[library] strtrim 구현하기  (0) 2024.06.27
[library] substr 구현하기  (0) 2024.06.18
[function] waitpid 함수 알아보기  (2) 2024.06.13
[function] wait 함수 알아보기  (0) 2024.06.09
Recent Posts
Popular Posts
Recent Comments