Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 문자열 대소문자 토글하기 – 대문자·소문자 상호 변환 프로그램

대소문자 토글(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 등의 함수를 올바르게 사용할 수 있습니다.