ft_putnbr_base.c
#include <unistd.h>
int ft_strlen(char *src)
{
int cnt;
cnt = 0;
while (src[cnt] != '\\0')
{
cnt++;
}
return (cnt);
}
void change_base(long long int nbr, char *base)
{
char a;
if ((nbr) >= ft_strlen(base))
{
change_base(nbr / ft_strlen(base), base);
change_base(nbr % ft_strlen(base), base);
}
else
{
a = base[nbr];
write(1, &a, 1);
}
}
void ft_putnbr_base(int nbr, char *base)
{
long long int nb;
nb = nbr;
if (nb >= 0)
{
change_base(nb, base);
}
else
{
nb = (-1) * nb;
write(1, "-", 1);
change_base(nb, base);
}
}
int main(void)
{
ft_putnbr_base(-2147483648, "poneyvif");
}
기계 채점 받았는데 floating exception이 발생했다. 아마도 base의 길이가 0일 때를 예외처리해야 하는 것 같다.
#include <unistd.h>
int ft_strlen(char *src)
{
int cnt;
cnt = 0;
while (src[cnt] != '\\0')
{
cnt++;
}
return (cnt);
}
int check_base(char *base)
{
int i;
int j;
i = 0;
if (ft_strlen(base) <= 1)
return (0);
while (i < ft_strlen(base) - 1)
{
j = i + 1;
while (j < ft_strlen(base))
{
if (base[i] == base[j])
return(0);
if ((base[i] == '-' || base [i] == '+') || (base[j] == '-' || base [j] == '+'))
return(0);
if ((9 <= base[i] && base[i] <= 13) || (base[i] == 32) || (9 <= base[i] && base[i] <= 13) || (base[i] == 32))
return(0);
j++;
}
i++;
}
}
void change_base(long long int nbr, char *base)
{
char a;
if ((nbr) >= ft_strlen(base))
{
change_base(nbr / ft_strlen(base), base);
change_base(nbr % ft_strlen(base), base);
}
else
{
a = base[nbr];
write(1, &a, 1);
}
}
void ft_putnbr_base(int nbr, char *base)
{
long long int nb;
nb = nbr;
if (check_base(base) == 0)
write(1, "\\0", 1);
else if (nb >= 0)
{
change_base(nb, base);
}
else
{
nb = (-1) * nb;
write(1, "-", 1);
change_base(nb, base);
}
}
int main(void)
{
ft_putnbr_base(-2147483648, " poneyvif");
}
코드를 수정해봤는데 이거는 백프로 norminette에 걸릴 것 같다.
함수를 하나 더 만들어봐야 하나…? 근데 화이트 스페이스도 필터 조건에 넣어야 할지는 잘 모르겠다.
최종 코드(라고 생각)
#include <unistd.h>
int ft_strlen(char *src)
{
int cnt;
cnt = 0;
while (src[cnt] != '\\0')
{
cnt++;
}
return (cnt);
}
int check_base01(char *base)
{
int i;
int j;
i = 0;
if (ft_strlen(base) <= 1)
return (0);
while (i < ft_strlen(base) - 1)
{
j = i + 1;
while (j < ft_strlen(base))
{
if (base[i] == base[j])
return(0);
j++;
}
i++;
}
}
int check_base02(char *base)
{
int i;
int j;
i = 0;
while (i < ft_strlen(base) - 1)
{
j = i + 1;
while (j < ft_strlen(base))
{
if (base[i] == '-' || base [i] == '+')
return(0);
if (base[j] == '-' || base [j] == '+')
return (0);
if ((9 <= base[i] && base[i] <= 13) || (base[i] == 32))
return(0);
if ((9 <= base[j] && base[j] <= 13) || (base[j] == 32))
return (0);
j++;
}
i++;
}
}
void change_base(long long int nbr, char *base)
{
char a;
if ((nbr) >= ft_strlen(base))
{
change_base(nbr / ft_strlen(base), base);
change_base(nbr % ft_strlen(base), base);
}
else
{
a = base[nbr];
write(1, &a, 1);
}
}
void ft_putnbr_base(int nbr, char *base)
{
long long int nb;
nb = nbr;
if (check_base01(base) == 0 || check_base02(base) == 0)
write(1, "\\0", 1);
else if (nb >= 0)
{
change_base(nb, base);
}
else
{
nb = (-1) * nb;
write(1, "-", 1);
change_base(nb, base);
}
}
int main(void)
{
ft_putnbr_base(-2147483648, "0123456789");
}