대소문자 토글(Toggle)이란?
대문자를 소문자로, 소문자를 대문자로 서로 바꾸는 작업을 일반적으로 토글(toggle)이라고 부릅니다.
각 문자를 토글한다는 것은 주어진 문자열 안에서 소문자는 대문자 형태로, 대문자는 소문자 형태로 각각 변환해 출력하는 것을 의미합니다. 예를 들어 TutoRialS를 토글하면 tUTOrIALs가 됩니다.
방법 1 — 아스키(ASCII) 코드 값으로 직접 변환
아스키 코드 체계에서 영문 대문자와 소문자는 정확히 32만큼의 값 차이를 가집니다. 예를 들어 'A'는 65, 'a'는 97입니다. 따라서 소문자에서 32를 빼면 대문자가 되고, 대문자에 32를 더하면 소문자가 됩니다. 이 원리를 활용하면 별도의 라이브러리 함수 없이도 손쉽게 변환할 수 있습니다.
다음은 사용자로부터 문자열을 입력받아 모든 문자의 대소문자를 반전시키는 C 프로그램입니다.
#include <stdio.h>
#define MAX 100
void toggle(char *string);
int main(){
char string[MAX];
printf("enter the string need to be toggle :\n");
gets(string);
toggle(string);
printf("final string after toggling is:\n");
printf("%s\n", string);
return 0;
}
void toggle(char *string){
int i = 0;
while(string[i] != '\0'){
if(string[i] >= 'a' && string[i] <= 'z'){
string[i] = string[i] - 32; // 소문자 → 대문자
}
else if(string[i] >= 'A' && string[i] <= 'Z'){
string[i] = string[i] + 32; // 대문자 → 소문자
}
i++;
}
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 확인할 수 있습니다.
enter the string need to be toggle :
TutoRialS PoinT C ProgrAmmIng LanGuage
final string after toggling is:
tUTOrIALs pOINt c pROGRaMMiNG lANgUAGE
방법 2 — 표준 라이브러리 함수 활용 (ctype.h)
C 표준 라이브러리의 ctype.h 헤더에 포함된 isupper(), islower(), toupper(), tolower() 함수를 사용하면 아스키 코드 값을 직접 계산하지 않고도 더 안전하고 가독성 좋은 코드를 작성할 수 있습니다.
#include <stdio.h>
#include <ctype.h>
int main(){
int i, length = 0;
char string[] = "TutORial";
length = sizeof(string) / sizeof(string[0]);
for(i = 0; i < length; i++){
if(isupper(string[i])){
string[i] = tolower(string[i]); // 대문자 → 소문자
}
else if(islower(string[i])){
string[i] = toupper(string[i]); // 소문자 → 대문자
}
}
printf("final string after conversion: %s", string);
return 0;
}
실행 결과
프로그램 실행 결과는 다음과 같습니다.
final string after conversion : tUTorIAL
참고 사항
gets()함수는 입력 길이를 제한할 수 없어 버퍼 오버플로우 위험이 있으므로, 실제 개발 환경에서는fgets()사용을 권장합니다.sizeof(string) / sizeof(string[0])는 배열 전체 크기를 요소 하나의 크기로 나누어 배열 길이를 구하는 방법이며, 널 종료 문자('\0')까지 함께 포함됩니다.- 두 번째 방법에서는
ctype.h헤더 파일을 반드시 포함해야isupper,tolower등의 함수를 올바르게 사용할 수 있습니다.