Do You Coding?

[library] strjoin ๊ตฌํ˜„ํ•˜๊ธฐ ๋ณธ๋ฌธ

CS & Engineering/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๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง๊ธฐ!