Do You Coding?
[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๋ฅผ ํด์ฃผ๋ ๊ฒ์ ์์ง ๋ง๊ธฐ!
'CS & Engineering > 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 |