Unborn 8.0 Yellow Pointer
본문 바로가기
42 SEOUL/0_Libft

[Libft] Part1 : toupper, tolower, atoi

by 에삐니 2022. 3. 26.
728x90

[이전 글]

 

[Libft] 나만의 첫 번째 라이브러리

1. 프로젝트 소개 C 프로그래밍을 할 때 매우 유용한 표준 함수들을 사용할 수 없다면 굉장히 지루할 거예요. 이 프로젝트를 통해 이러한 표준 함수들을 구현하고, 이해하고, 어떻게 사용하는지

bini-079.tistory.com

[다음 글]

 

[Libft] Part2 : Additional functions

삐니의 소소한 일상 [Libft] Part2 : Additional functions 본문 42 SEOUL/Libft [Libft] Part2 : Additional functions 에삐니 2022. 3. 24. 01:22 Prev 1 2 3 4 5 6 7 8 9 ··· 104 Next

bini-079.tistory.com


Part1 : Libc functions

아래의 함수들을 다시 구현하세요. 이 함수들은 외부 함수를 필요로 하지 않습니다 :

  • isalpha, isdigit, isalnum, isascii, isprint
  • bzero, memset, memcpy, memmove, memchr, memcmp
  • strlen, strnstr, strlcpy, strlcat, strchr, strrchr, strncmp
  • toupper, tolower, atoi

다음의 함수들은 외부 함수 malloc을 사용하여 구현하세요 :

  • calloc, strdup

 

ft_toupper

int		ft_toupper(int c)
{
	if (c >= 'a' && c <= 'z')
		return ('A' + (c - 'a'));
	else
		return (c);
}
  • 문자를 소문자에서 대문자로 변환하는 함수이다.

 

ft_tolower

int		ft_tolower(int c)
{
	if (c >= 'A' && c <= 'Z')
		return ('a' + (c - 'A'));
	else
		return (c);
}
  • 문자를 대문자에서 소문자로 변환하는 함수이다.

 

ft_atoi

int	ft_atoi(const char *str)
{
	size_t		i;
	int			sign;
   	unsigned long long	max;
   	unsigned long long	num;
	
	i = 0;
	num = 0;
	sign = 1;
	max = 9223372036854775807
	while (str[i] && (str[i] == 32 || (str[i] >= 9 && str[i] <= 13)))
		i++;
	if (str[i] == '-')
		sign = -1;
	if (str[i] == '-' || str[i] == '+')
		i++;
	while (ft_isdigit(str[i]))
	{
		num = (num * 10) + (str[i] - '0');
		if (num >= max && sign == 1)
			return (-1);
		else if (num > max + 1 && sign == -1)
			return (0);
		i++;
	}
	return (num * sign);
}
  • 문자열 정수를 int형 정수로 변환하는 함수이다.
  • 공백을 제외하고 부호문자를 처리한 후 숫자로 처리한다.
  • 숫자가 아닌 다른 문자가 나오면 멈추고 이전까지 계산한 수를 반환한다.
  • 오버플로우 값이 들어오면 -1, 언더플로우 값이 들어오면 0을 리턴한다.(strtol 함수의 결과값 처리 과정에서 생기는 erange 오류)
  • 결과적으로 오버플로우, 언더플로우의 경우 libft에서 신경쓰지 않아도 되는 부분이라고 한다.
728x90
반응형

댓글