C 언어에서는 알파벳 문자의 ASCII 코드 값 성질만 이해하면, 별도의 라이브러리 함수 없이도 문자열을 대문자 또는 소문자로 손쉽게 변환할 수 있습니다. 소문자(a~z)의 ASCII 코드는 97~122, 대문자(A~Z)는 65~90으로, 두 범위는 정확히 32만큼 차이가 납니다. 이 원리를 활용한 변환 프로그램을 단계별로 살펴보겠습니다.
1. 문자열을 대문자로 변환하는 프로그램
다음은 사용자가 입력한 문자열을 모두 대문자로 바꾸어 출력하는 C 언어 프로그램입니다.
예제 코드
#include <stdio.h>
#include <string.h>
int main() {
char s[100];
int i;
printf("\nEnter a string : ");
gets(s);
for (i = 0; s[i]!='\0'; i++) {
if(s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 32;
}
}
printf("\nString in Upper Case = %s", s);
return 0;
}
실행 결과
Enter a string : hello world! String in Upper Case = HELLO WORLD!
코드 설명
위 프로그램의 핵심 변환 로직은 main() 함수 안에 구현되어 있습니다. 먼저 char형 배열 s[100]을 선언하여 사용자가 입력한 문자열을 저장합니다.
그다음 for 루프로 문자열의 각 문자를 하나씩 순회하면서, if 문으로 해당 문자가 소문자('a'~'z') 범위에 속하는지 확인합니다. 소문자라면 ASCII 값에서 32를 빼서 대문자로 변환합니다.
for (i = 0; s[i]!='\0'; i++) {
if(s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 32;
}
}
참고: 예제에 사용된 gets() 함수는 버퍼 오버플로우 위험 때문에 C11 표준에서 제거되었습니다. 실제 프로젝트에서는 fgets()처럼 안전한 입력 함수를 사용하는 것이 좋습니다.
2. 문자열을 소문자로 변환하는 프로그램
반대로, 입력받은 문자열을 모두 소문자로 바꾸는 프로그램은 다음과 같습니다.
예제 코드
#include <stdio.h>
#include <string.h>
int main() {
char s[100];
int i;
printf("\nEnter a string : ");
gets(s);
for (i = 0; s[i]!='\0'; i++) {
if(s[i] >= 'A' && s[i] <= 'Z') {
s[i] = s[i] + 32;
}
}
printf("\nString in Lower Case = %s", s);
return 0;
}
실행 결과
Enter a string : HELLOWORLD String in Lower Case = helloworld
코드 설명
이 프로그램 역시 변환 로직이 main() 함수 안에 있으며, char형 배열 s[100]에 입력 문자열을 저장합니다.
for 루프로 각 문자를 순회하면서 if 문으로 대문자('A'~'Z') 여부를 검사하고, 대문자라면 ASCII 값에 32를 더해 소문자로 변환합니다.
for (i = 0; s[i]!='\0'; i++) {
if(s[i] >= 'A' && s[i] <= 'Z') {
s[i] = s[i] + 32;
}
}
마무리
ASCII 코드에서 대문자와 소문자가 32만큼 차이 난다는 사실만 기억하면, 누구나 직접 대소문자 변환 로직을 구현할 수 있습니다. 참고로 <ctype.h> 헤더에 포함된 toupper(), tolower() 함수를 활용하면 더 안전하고 가독성 좋은 코드를 작성할 수 있으니, 상황에 맞게 선택해서 사용하시기 바랍니다.