c07 - KimTaebin-ai/study_posts GitHub Wiki
์ฌ๊ธฐ์๋ถํฐ ๋์ ํ ๋น์ ์ฌ์ฉํ๋ค. ์ด๋ ต์ง ์๋ค.
c10์ ๊น์ง๋ ์ฝ๋ค๊ณ ํ๋ ํ๋งํ๋ฉด์ ์ง๋ ๋ฐ์.
๋๋ฃํ์ต๋ ๋ง์ดํ๊ณ ๋ํ๋ ๋ ๋ ๋ง์ด!!
#include <stdio.h>
#include <stdlib.h>
char *ft_strdup(char *src)
{
char *result_str;
int len;
int i;
len = 0;
while (src[len] != '\0')
len++;
result_str = (char *)malloc(sizeof(char) * (len + 1));
if (result_str == 0)
return (0);
i = 0;
while (i < len)
{
result_str[i] = src[i];
i++;
}
result_str[i] = '\0';
return (result_str);
}
#include <stdlib.h>
int *ft_range(int min, int max)
{
int *arr;
int range;
int i;
i = 0;
if (min >= max)
return (0);
range = max - min;
arr = (int *)malloc(sizeof(int) * range);
if (arr == 0)
return (0);
while (i < range)
arr[i++] = min++;
return (arr);
}
#include <stdlib.h>
#include <unistd.h>
int ft_ultimate_range(int **range, int min, int max)
{
int *ptr;
int r;
int i;
r = max - min;
if (r <= 0)
return (0);
ptr = (int *)malloc(sizeof(int) * r);
if (ptr == 0)
return (0);
i = 0;
while (min < max)
ptr[i++] = min++;
*range = ptr;
return (r);
}
#include <stdlib.h>
int str_len(char *str)
{
int len;
len = 0;
while (str[len] != '\0')
len++;
return (len);
}
char *str_cat(char *str1, char *str2)
{
int i;
int len;
i = 0;
len = 0;
while (str1[len] != '\0')
len++;
while (str2[i] != '\0')
str1[len++] = str2[i++];
str1[len] = '\0';
return (str1);
}
char *ft_strjoin(int size, char **strs, char *sep)
{
int i;
int len;
char *result;
i = 0;
len = 0;
while (i < size)
len += str_len(strs[i++]);
if (size > 0)
len += (size - 1) * str_len(sep);
result = (char *)malloc(sizeof(char) * (len + 1));
result[0] = '\0';
if (result == 0)
return (0);
i = 0;
while (i < size)
{
result = str_cat(result, strs[i]);
if (i < size - 1)
result = str_cat(result, sep);
i++;
}
result[len] = '\0';
return (result);
}
์ด ํจ์๋ ๋๊ฐ์ ๋ฌธ์์ด์ ํฉ์น๋ค.
ํฉ์น ๋ sep์ ์ถ๊ฐํด์ ํฉ์น๋ค.
๊ทธ๋ฌ๋ฉด ํ ๋นํด์ผํ ๋ฌธ์์ด์ ๊ธธ์ด๋ ๋ชจ๋ ๋ฌธ์ฅ์ ๊ธธ์ด + (sep์ ๊ธธ์ด * ๋ฌธ์ฅ์ ๊ฐ์-1)๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
๊ทผ๋ฐ ๋๋ ๊ทธ๋ฅ ์กฐ๊ธ ๋ ์ฌ์ ์๊ฒ ์ก์์ฃผ๊ณ ๋ ๋ฌธ์๋ก ์ด๊ธฐํํด์คฌ๋ค.
#include <stdio.h>
#include <stdlib.h>
int is_space(char c);
int base_check(char *base);
int find_base(char *base, char c);
int nbr_len(int nbr, int len);
int ft_atoi(char *str, char *base, int len)
{
int result;
int temp;
result = 0;
temp = 0;
while (*str != '\0')
{
temp = find_base(base, *str++);
if (temp < 0)
break ;
result = result * len + temp;
}
return (result);
}
int ft_atoi_base(char *nbr, char *base)
{
int num;
int sign;
int len;
num = 0;
sign = 1;
len = base_check(base);
while (is_space(*nbr))
nbr++;
while (*nbr == '-' || *nbr == '+')
{
if (*nbr == '-')
sign *= -1;
nbr++;
}
num = ft_atoi(nbr, base, len);
return (num * sign);
}
char *ft_putnbr_base(int num, char *base, char *result, int len)
{
int i;
int temp;
int base_len;
base_len = base_check(base);
if (num == 0)
result[0] = base[0];
if (num < 0)
result[0] = '-';
i = len - 1;
while (num != 0)
{
temp = num % base_len;
if (temp < 0)
temp *= -1;
result[i] = base[temp];
num /= base_len;
i--;
}
result[len] = '\0';
return (result);
}
char *ft_convert_base(char *nbr, char *base_from, char *base_to)
{
int num;
int len;
char *result;
if (base_check(base_from) < 2 || base_check(base_to) < 2)
return (0);
num = ft_atoi_base(nbr, base_from);
len = nbr_len(num, base_check(base_to));
result = (char *)malloc(sizeof(char) * (len + 1));
if (result == 0)
return (0);
result = ft_putnbr_base(num, base_to, result, len);
return (result);
}
int is_space(char c)
{
char *space;
space = " \n\t\v\f\r";
while (*space != '\0')
{
if (c == *space)
return (1);
space++;
}
return (0);
}
int base_check(char *base)
{
int len;
int i;
int j;
len = 0;
i = 0;
j = 0;
while (base[len] != '\0')
{
if (is_space(base[len]) || base[len] == '-' || base[len] == '+')
return (0);
len++;
}
while (i < len - 1)
{
j = i + 1;
while (j < len)
{
if (base[i] == base[j])
return (0);
j++;
}
i++;
}
return (len);
}
int find_base(char *base, char c)
{
int i;
i = 0;
while (base[i] != '\0')
{
if (base[i] == c)
return (i);
i++;
}
return (-1);
}
int nbr_len(int nbr, int len)
{
int cnt;
cnt = 0;
if (nbr == 0)
return (1);
if (nbr < 0)
cnt++;
while (nbr != 0)
{
cnt++;
nbr /= len;
}
return (cnt);
}
์ด ๋ฌธ์ ๋ 04๋ฒ์ ์ง๋ฒ๋ณํ ๋ฌธ์ ๋ฅผ ๋์ ํ ๋น์ผ๋ก ํธ๋ ๊ฒ์ด๋ค.
๋ฌธ์ ๋ฅผ ์ฝ๋๋ฐ ์ ์ถํด์ผํ๋ ํ์ผ์ด 2๊ฐ๋ค.
๋ฒ์จ ํค๋ํ์ผ์ ๋ง๋ค์ด์ผ ํ๋ ๊ฑด๊ฐ? ์ด์ ๊ฐ ๋ญ์ง ํ์ฐธ ๊ณ ๋ฏผํ๋๋ฐ...
norminette์์๋ ํ ํ์ผ์์ 5๊ฐ ์ด์์ ํจ์๋ฅผ ๋ฃ์ ์ ์๊ธฐ ๋๋ฌธ์
๋๊ฐ์ ํ์ผ์ ๋ง๋ค์ด์ ๊ตฌํํ๋ผ๊ณ ์๊ตฌํ๋ ๊ฒ์ด๋ค. ํ์ผ์ ๋ง๋ค ๋ ๊ทธ๋ฅ ํ์ํ ๊ฒ ๊ฐ์ ๊ฑฐ ๋ค ์ง์ด๋ฃ๊ณ ์ ์ ํ๊ฒ ๋ฐฐ๋ถํด์ ๋ง๋ค๋ฉด๋๋ค.
norminette ๋ค ์ดnorm;;
#include <stdlib.h>
int sep(char c, char *sep)
{
while (*sep != '\0')
{
if (*sep == c)
return (1);
sep++;
}
return (0);
}
char *ft_str_dup(char *str, char *charset)
{
char *new_str;
int len;
int i;
len = 0;
while (str[len] != '\0' && !sep(str[len], charset))
len++;
new_str = (char *)malloc(sizeof(char) * (len + 1));
if (new_str == 0)
return (0);
i = 0;
while (i < len)
{
new_str[i] = str[i];
i++;
}
new_str[i] = '\0';
return (new_str);
}
int count(char *str, char *charset)
{
int cnt;
cnt = 0;
while (*str != '\0')
{
if (!sep(*str, charset))
{
cnt++;
while (!sep(*str, charset) && *str != '\0')
str++;
}
else
str++;
}
return (cnt);
}
char **ft_split(char *str, char *charset)
{
int num;
int i;
char **result;
num = count(str, charset);
result = (char **)malloc(sizeof(char *) * (num + 1));
if (result == 0)
return (0);
i = 0;
while (*str != '\0')
{
if (!sep(*str, charset))
{
result[i++] = ft_str_dup(str, charset);
while (!sep(*str, charset) && *str != '\0')
str++;
}
else
str++;
}
result[i] = 0;
return (result);
}
์ด ํจ์๋ strjoin๊ณผ ์ ํํ๊ฒ ๋ฐ๋๋๋ค.
๊ตฌ๋ถ์๋ฅผ ๋ฃ๋๊ฒ์์, ์ด๋ฏธ ๊ตฌ๋ถ์๊ฐ ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋นผ๋ฒ๋ฆฐ ๋ฌธ์ฅ์ผ๋ก ๋ง๋ค๋ฉด๋๋ค.
์ด ๋ strdup๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
์๋ํ๋ฉด ๊ตฌ๋ถ์๋ฅผ ๋ง๋ ๋๊น์ง์ ๋ฌธ์์ด์ ๋น ๋ฌธ์์ด์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์์๋ถํฐ ๋ค์ ๊ตฌ๋ถ์๋ฅผ ๋ง๋ ๋๊น์ง ๋ฐ๋ณตํ๊ณ ์ด๋ ๊ฒ ๋ฃ์ด์ค ๋ฌธ์์ด์ ๋ฐํํด์ฃผ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
ํ๊ฐํ๋ฉด์ ๋์๋ณด๋ strdup๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๊ฒ ๋ค๊ณ ๋ณธ๋ฅ์ ์ผ๋ก ๋ ์ฌ๋ฆฐ ์ฌ๋๋ค์ ๋ค ์ข ์น์๋ ๋ถ๋ค์ธ ๊ฒ ๊ฐ์๋ฐ
๋๋ ๊ทธ ๊ทธ๋ฃน์ ์ํ ๊ฒ ๊ฐ์์ ๋ด์ฌ ๋ฟ๋ฏํ๋ค