Do You Coding?
[library] strtrim ๊ตฌํํ๊ธฐ ๋ณธ๋ฌธ

๐ ๋งค๋ด์ผ (in subject)
Function name
do_strtrim
Prototype
char *do_strtrim(char const *s1, char const *set);
Parameters
s1: The string to be trimmed. set: The reference set of characters to trim.
: s1์ ์๋ผ๋ผ ๋ฌธ์์ด. / 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์ ์ฌ์ฉํ์ฌ ํ ๋นํ๊ณ ๋ฌธ์์ด์ ์ฒ์๊ณผ ๋์์ 'set'์ ์ง์ ๋ ๋ฌธ์๊ฐ ์ ๊ฑฐ๋ 's1' ๋ณต์ฌ๋ณธ์ ๋ฐํ
๐ ์์ฑ ์ฝ๋
char *do_strtrim(char const *s1, char const *set)
{
char *str;
size_t i;
size_t a;
size_t s1_len;
if (s1 == NULL)
return (NULL);
s1_len = do_strlen(s1);
i = 0;
a = 0;
while (do_strchr(set, s1[i]) != 0 && s1[i] != '\0')
i ++;
while (do_strchr(set, s1[s1_len - 1]) != 0 && s1_len > i)
s1_len --;
str = (char *)malloc(sizeof(char) * (s1_len - i + 1));
if (str == NULL)
return (NULL);
while (i < s1_len)
{
str[a] = s1[i];
a ++;
i ++;
}
str[a] = '\0';
return (str);
}
๐ ์ฝ๋ ๋ฆฌ๋ทฐ
strtrim ํจ์๋ ๋ฌธ์์ด์ ๋งจ์๊ณผ ๋งจ๋ค์์๋ถํฐ ๊ฐ๊ฐ ์์ํ์ฌ, set์ ์ค์ ํด๋ ๋ฌธ์๋ค ์ค ํ๋์ ํด๋นํ๋ฉด ์ ๊ฑฐํ๊ณ ,
๊ทธ ์ธ์ ๋ฌธ์๊ฐ ์ค๋ฉด ๊ทธ ์ดํ๋ถํฐ๋ ์ ๊ฑฐํ์ง์์ ๋ค ๋จ์ ์ต์ข ๋ฌธ์์ด์ ๋ฐํํด์ฃผ๋ ํจ์์ด๋ค.
์์๋ฅผ ๋ค๋ฉด, set์ ์ค์ ๋ ๋ฌธ์์ด์ด abc ์ด๋ฉด,
aaabbcgoodcabca ๊ณผ ๊ฐ์ ํํ๊ฐ s1๋ก ๋ค์ด์ฌ๋, good๋ง ์๋ผ๋ธ๋ค.
aaabbcgoabcodcabca ์ฒ๋ผ ์ค๊ฐ์ set์ ์ค์ ๋ ๋ฌธ์์ด์ด ๋ค์ด์ค๋ฉด ํด๋น ๋ถ๋ถ์ ์๋ผ์ง์ง ์๊ณ goabcod ๋ก ์๋ผ์ง๋ค.
๋งจ์๊ณผ ๋งจ๋ค์ set ์ค์ ๋ฌธ์๋ฅผ ์ง์ฐ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ฏ๋ก ์์ฒ๋ผ ๋์ํ๊ฒ ๋๋ค.
์ฒ์์๋ ์ฐ์ s1์ด ์๋ฌด๊ฒ๋ ์๋ NULL์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ, ๋ฐ๋ก NULL์ ๋ฐํํด์ค๋ค.
๊ทธ ํ ๊ธธ์ด๋ฅผ ๊ตฌํด์ฃผ๊ณ , ์ด ๋งจ๋ค์์๋ถํฐ ์ค์ ๋ฌธ์์ด์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ด ๊ธธ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ด์ , strchr์ ์ด์ฉํด์, s1์ ๋ฌธ์ ํ๋ํ๋๋ฅผ set์ ์๋์ง ์ ๊ฒํ๋ ๋ฐฉ์์ ์ทจํ๋ค.
๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฌธ์์ด์ ๋๊น์ง ํ์ธํด์ฃผ๋ฉฐ, set์ ์๋ ๋ฌธ์๊ฐ ๋์ค๋ฉด ๋ฐ๋ณต์ ์ข ๋ฃํ๋ค.
์ฐ๋ฆฌ๋ ์ด ๋ฐฉ๋ฒ์ ํตํด ์๋ผ์ง ๋ฌธ์์ด์ ๋งจ ์ ๋ถ๋ถ์ด ๋ ์ธ๋ฑ์ค 'i'๋ฅผ ์ฐพ๋๋ค.
๋ค์ strchr์ ์ด์ฉํด์ ์ด๋ฒ์๋ ๋ค์์๋ถํฐ ํ๋ํ๋๋ฅผ set์ ์๋์ง ์ ๊ฒํด์ค ๊ฒ์ธ๋ฐ,
s1_len์ ๊ตฌํ ๊ฒ์ ํ์ฉํ์ฌ ์ด ๊ฐ์ ์ค์ฌ๊ฐ๋ฉฐ ์๋ผ์ง ๋ฌธ์์ด์ ๋งจ ๋ท ๋ถ๋ถ์ด ๋ ์ธ๋ฑ์ค 's1_len' ์ ์ฐพ์ ๊ฒ์ด๋ค.
(s1_len ๋์ ์๋ก์ด ์ธ๋ฑ์ค๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ณด๊ธฐ์ ์ ์ ํ๊ฒ ์ง๋ง, ์ต๋ํ ๋ณ์ ์ฌ์ฉ์ ์ค์ด๊ธฐ ์ํด ์ด๋ฅผ ์ฌ์ฉํ๋ค.)
๊ทธ๋ ๊ฒ s1_len์ ์ค์ฌ๊ฐ๋ฉฐ ๋ฐ๋ณตํ๋ค, ์ด์ ์ ๊ตฌํ i ์ธ๋ฑ์ค๋ฅผ ๋ง๋๊ฑฐ๋ set์ ์๋ ๋ฌธ์๊ฐ ๋์ค๋ฉด ์ข ๋ฃํ๋ค.
set์ ์๋ ๋ฌธ์๋ง ์กด์ฌํด์ i๊ฐ ์ด๋ฏธ ๋ฌธ์์ด ๋์ ๋๋ฌํ๋ค๋ฉด, ์์ ๋ฐ๋ณต๋ฌธ์ ๋ฐ๋ก ์ข ๋ฃ๋ ๊ฒ์ด๋ค.
์ ๊ทธ๋ ๊ฒ ๊ตฌํด์ง i์ s1_len์ ํตํด ์๋ผ์ง ๋ฌธ์์ด ์ฒ์๊ณผ ๋๋ถ๋ถ์ ์๊ฒ ๋์์ผ๋,
๋์์ ์ฒ์ ์ธ๋ฑ์ค๋ฅผ ๋นผ๋ฉด ๊ธธ์ด๋ฅผ ์ ์ ์๋ค. (s1_len - i)
์ด ๊ฐ์ \0์ ๋ฃ์ 1์ ์ถ๊ฐํ ๊ฐ์ malloc ์ผ๋ก str์ ํ ๋นํด์ค๋ค.
์ด์ ๋ฐํํ str[]์ i๋ถํฐ s1_len๊น์ง ๋ฃ์ด์ฃผ๊ณ \0์ ๋ง์ง๋ง์ ๋ฃ์ผ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์๋ผ์ง ๋ฌธ์์ด์ด str์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
(์ฝ๊ฐ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์๋ ๋ณ์๋ช ๊ณผ ์ธ๋ฑ์ค ํ์ฉ์ด ์์ฝ๊ธด ํ๋ค.. ์ถํ์ ์์ ํด๋ณผ ์์ !)
'CS & Engineering > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [library] itoa ๊ตฌํํ๊ธฐ (0) | 2024.06.29 |
|---|---|
| [library] split ๊ตฌํํ๊ธฐ (0) | 2024.06.29 |
| [library] strjoin ๊ตฌํํ๊ธฐ (0) | 2024.06.26 |
| [library] substr ๊ตฌํํ๊ธฐ (0) | 2024.06.18 |
| [function] waitpid ํจ์ ์์๋ณด๊ธฐ (2) | 2024.06.13 |