본문 바로가기

컴퓨터/C++

대소문자 변경하기

반응형

문자 하나를 입력받았을 때 그 문자를 대문자로 변경하는 함수와, 소문자로 변경하는 함수를 구현하는 방법은 ascii code를 이용하면 된다.


쉽게 사용할 수 있는 방법은 대문자와 소문자의 ascii code의 차이가 32만큼 난다는 사실을 이용한다는 것이다.

즉 대문자인 경우에는 32를 더해주면 소문자로 바꿀 수 있고, 소문자인 경우에는 32를 빼주면 대문자로 바꿀 수 있다.


이것을 C++ 문법으로 표현하면 아래와 같다.


char to_lower(char ch){
	if(ch >= 'A' && ch <= 'Z')
		return ch + 32;
	else
		return ch;
}

char to_upper(char ch){
	if(ch >= 'a' && ch <= 'z')
		return ch - 32;
	else
		return ch;
}


이번에는 BIT MASK를 이용해서 표현하는 방법을 살펴보도록 하겠다. 대문자와 소문자를 각각 8bit 이진수로 표현을 하면 앞에서 세 번째 비트를 제외한 나머지 비트는 모두 같다는 것을 알 수 있다. 그렇기 때문에 이 사실을 이용해서 대소문자를 변경할 수 있다.


char to_lower(char ch){
	if(ch >= 'A' && ch <= 'Z')
		return ch | 0x20;
	else
		return ch;
}

char to_upper(char ch){
	if(ch >= 'a' && ch <= 'z')
		return ch & 0xdf;
	else
		return ch;
}


BIT MASK를 사용한 경우 약간 코드를 이해하기는 어려워졌지만, 그래도 속도 상으로는 매우 약간 이득을 볼 수 있다.(물론 컴파일러가 좋다면 위의 코드도 어셈블리로 변환할 때 BIT 연산자로 변경해서 사용을 하겠지...)

반응형

'컴퓨터 > C++' 카테고리의 다른 글

complex class 구현  (0) 2016.04.27
Merge Sort 구현  (0) 2016.04.17
*없이 두 정수 곱하기  (0) 2016.04.13
Stack 기반 미로 찾기(DFS)  (0) 2015.10.27
Stack을 이용한 간단한 계산기  (0) 2015.10.17