본문 바로가기

프로그래밍/C

[library] tolower 구현하기

📌 매뉴얼 (Linux)

더보기

NAME
       tolower - convert lowercase
: 소문자로 바꾸기


SYNOPSIS
       #include <ctype.h>
       int tolower(int c);


DESCRIPTION
       These functions convert uppercase letters to lowercase, and vice versa.


       If c is an uppercase letter, tolower() returns its lowercase equivalent, if a lowercase repre‐
       sentation exists in the current locale.  Otherwise, it returns c.
: 이러한 기능은 대문자를 소문자로 변환하고 그 반대의 경우도 마찬가지이다.

c가 대문자인 경우 tolower()는 소문자로 반환하고 그렇지 않으면 c를 반환한다.


RETURN VALUE
       The value returned is that of the converted letter, or c if the conversion was not possible.

: 환되는 값은 변환된 문자 또는 변환이 불가능한 경우에 c를 반환한다.

 

📌 작성 코드

int	do_tolower(int c)
{
	if (65 <= c && c <= 90)
		c = c | (1 << 5);
	return (c);
}

 

📌 코드 리뷰

tolower도 toupper와 유사하게 단순히 대문자 영어를 소문자로 바꿔서 반환해준다.

함수를 확인해보면, if문에서 65 ~ 90에 c가 해당되는지 판별하는데, 아스키 코드 상에서 각각 'A', 'Z'를 의미한다.

따라서, 대문자에 해당되면 조건을 만족하고, 이제 소문자로 바꿔만 주면 되는데 마찬가지로 비트연산을 한다.

 

우선 1 << 5 는, 피연산자인 1을 5만큼 왼쪽으로 비트 이동을 시켜준다. (toupper에서와 동일)

00000000 00000000 00000000 00000001 에서 5칸 왼쪽으로 이동하여

00000000 00000000 00000000 00100000 가 되어진 상태이다. (int 이므로 32비트)

 

기존에 있던 c (예시로 'D' 의 값인 68이 들어있다고 가정)와 | 비트 연산을 해주는데,

OR 연산이므로 둘 중 하나라도 1이면 1이 되도록 계산된다. 그럼,

00000000 00000000 00000000 01000100 

| 00000000 00000000 00000000 00100000

__________________________________

00000000 00000000 00000000 01100100

 

이라는 값이 나오게 된다. 이를 10진수로 변환해보면, 100이 나오고, 이는 'd' 를 의미하므로 소문자로 변경되었다.

 

이렇게해서, toupper 와 tolower를 조금 더 참신하게 비트연산을 통해 만들어보았다.

'프로그래밍 > C' 카테고리의 다른 글

[function] strerror 함수 알아보기  (0) 2024.05.23
[function] perror 함수 알아보기  (2) 2024.05.20
[library] toupper 구현하기  (0) 2024.05.13
[library] strdup 구현하기  (0) 2024.05.13
[library] strnstr 구현하기  (0) 2024.05.10
Recent Posts
Popular Posts
Recent Comments