Do You Coding?

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

CS & Engineering/C

[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์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

(์•ฝ๊ฐ„ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ช…๊ณผ ์ธ๋ฑ์Šค ํ™œ์šฉ์ด ์•„์‰ฝ๊ธด ํ•˜๋‹ค.. ์ถ”ํ›„์— ์ˆ˜์ •ํ•ด๋ณผ ์˜ˆ์ •!)