c 언어/c 표준 라이브러리(Standard C Library)

C 표준 라이브러리 `ctype.h` 변환 함수 정리

임베디드 친구 2025. 3. 2. 11:54
728x90
반응형

C 표준 라이브러리 ctype.h 변환 함수 정리

C 언어에서 제공하는 ctype.h 헤더 파일은 문자 처리를 위한 다양한 함수를 포함하고 있습니다. 특히, 대소문자 변환과 관련된 함수는 문자열을 처리할 때 유용하게 사용할 수 있습니다. 이번 포스팅에서는 tolower, toupper 등의 변환 함수에 대해 자세히 살펴보겠습니다.


1. tolower 함수

tolower 함수는 대문자를 소문자로 변환하는 함수입니다. 만약 인자로 전달된 문자가 대문자라면 해당하는 소문자로 변환하고, 그렇지 않으면 그대로 반환합니다.

함수 원형

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

매개변수

  • c : 변환할 문자 (정수형 값, 보통 char 값을 int로 변환하여 전달)

반환값

  • 대문자인 경우 해당하는 소문자 반환
  • 그 외의 경우는 그대로 반환

사용 예제

#include <stdio.h>
#include <ctype.h>

int main() {
    char upper = 'A';
    char lower = tolower(upper);
    printf("%c -> %c\n", upper, lower);

    char nonAlpha = '1';
    printf("%c -> %c\n", nonAlpha, tolower(nonAlpha));

    return 0;
}

실행 결과

A -> a
1 -> 1

2. toupper 함수

toupper 함수는 소문자를 대문자로 변환하는 함수입니다. 만약 인자로 전달된 문자가 소문자라면 해당하는 대문자로 변환하고, 그렇지 않으면 그대로 반환합니다.

함수 원형

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

매개변수

  • c : 변환할 문자 (정수형 값, 보통 char 값을 int로 변환하여 전달)

반환값

  • 소문자인 경우 해당하는 대문자 반환
  • 그 외의 경우는 그대로 반환

사용 예제

#include <stdio.h>
#include <ctype.h>

int main() {
    char lower = 'b';
    char upper = toupper(lower);
    printf("%c -> %c\n", lower, upper);

    char nonAlpha = '3';
    printf("%c -> %c\n", nonAlpha, toupper(nonAlpha));

    return 0;
}

실행 결과

b -> B
3 -> 3

3. 문자열 변환 응용 예제

보통 tolowertoupper는 개별 문자 변환을 위한 함수이지만, 이를 활용하여 문자열 전체를 변환하는 함수를 만들 수도 있습니다.

소문자로 변환하는 함수

#include <stdio.h>
#include <ctype.h>

void strToLower(char *str) {
    while (*str) {
        *str = tolower(*str);
        str++;
    }
}

int main() {
    char str[] = "Hello World!";
    printf("원본: %s\n", str);
    strToLower(str);
    printf("소문자 변환: %s\n", str);
    return 0;
}

실행 결과

원본: Hello World!
소문자 변환: hello world!

대문자로 변환하는 함수

#include <stdio.h>
#include <ctype.h>

void strToUpper(char *str) {
    while (*str) {
        *str = toupper(*str);
        str++;
    }
}

int main() {
    char str[] = "Hello World!";
    printf("원본: %s\n", str);
    strToUpper(str);
    printf("대문자 변환: %s\n", str);
    return 0;
}

실행 결과

원본: Hello World!
대문자 변환: HELLO WORLD!

4. 변환 함수의 주의점

  1. ASCII 문자만 지원: tolowertoupper는 ASCII 문자에 대해 동작하며, 일부 다국어 문자(예: 한글, 일본어, 중국어 등)에는 적용되지 않습니다.
  2. 정수형 매개변수 사용: 함수의 매개변수가 int 타입이므로, 반드시 unsigned char 또는 EOF와 호환되는 값만 전달해야 합니다. 그렇지 않으면 정의되지 않은 동작(UB)이 발생할 수 있습니다.
  3. locale.h와 함께 사용 가능: 지역화(Locale)를 고려한 문자 변환이 필요하면 setlocale()을 사용하여 로케일을 설정해야 합니다.

예를 들어, 특정 언어 환경에서 로케일을 설정하여 tolower 동작을 확인할 수 있습니다.

#include <stdio.h>
#include <ctype.h>
#include <locale.h>

int main() {
    setlocale(LC_CTYPE, "en_US.UTF-8");
    printf("Ä -> %c\n", tolower('Ä'));
    return 0;
}

5. 결론

C 언어에서 tolowertoupper 함수는 간단하지만 강력한 문자 변환 기능을 제공합니다. 문자열을 변환하는 유틸리티 함수를 만들면 보다 효과적으로 사용할 수 있으며, 다국어 지원이 필요한 경우 locale.h를 활용하는 것이 중요합니다.

반응형