<개인공부>/[C언어, C++]

[C언어/C++] tolower, toupper 대문자 소문자 변경

BlockDMask 2020. 12. 16. 00:30
반응형

안녕하세요. BlockDMask 입니다.
오늘은 C언어, C++에서 알파벳을 소문자는 대문자로, 대문자는 소문자로 변경해주는 tolower, toupper 함수에 대해서 알아보려고 합니다.

<목차>
1. toupper, tolower 함수 원형과 사용법
2. tolower, toupper 함수 예제


1. C, C++ toupper, tolower 함수 설명


1-1) 헤더파일

C언어 : <ctype.h>
C++ : <cctype>


1-2) tolower 함수 원형 및 설명

int tolower(int c);

매개변수 : 문자를 인자로 받습니다. 문자를 넣게되면 아스키 코드표에 기반한 10진 수로 변환되어 들어가며, 숫자가 들어가게 되어도 아스키 코드 표에 기반한 숫자로 인식합니다.
즉 int 타입인 65번이 들어오면 내부적으로는 'A'로 인식합니다.
문자 'A'가 들어오면 아스키 코드표에 기반하여 65번으로 받게 됩니다.

반환형 : 매개변수로 들어온 인자가 대문자인 경우 소문자로 반환해줍니다.
인자로 소문자가 들어올 경우 소문자를 반환해줍니다.
인자로 대소문자가 아닌 다른 문자가 들어온 경우 해당 문자 그대로 반환합니다.
결론적으로 대문자만 소문자로 변경하고 다른 모든문자는 그대로 반환하는 함수 입니다.


1-3) toupper 함수 원형 및 설명

int toupper(int c);

매개변수 : 문자를 인자로 받습니다. 문자를 넣게되면 아스키 코드표에 기반한 10진 수로 변환되어 들어가며, 숫자가 들어가게 되어도 아스키 코드 표에 기반한 숫자로 인식합니다.

반환형 : 소문자만 대문자로 변경해서 반환해주고 다른 모든문자는 그대로 반환하는 함수 입니다.


** tolower, toupper 함수의 원리는 아스키 코드표를 보면 쉽게 알수 있습니다.
'a'는 97번이고, 'A'는 65번 입니다.
toupper라면 'a'인 97번이 들어오면 -32를 하여 65번에 해당하는 'A'를 반환하는 것 입니다.
반대로
tolower 함수에 'A'인 65번이 들어오면 +32를 하여 97번에 해당하는 소문자 'a'를 반환하는 것 입니다.
'A', 'a'를 한번 보면 이렇습니다.

원리를 알고나니 간단하지 않나요? 이것도 한번 직접 만들어 볼까요?


2. C/C++ toupper, tolower 예제


2-1) toupper, tolower 함수로 대문자 소문자 변경

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<ctype.h>
#include<stdio.h>
 
void printInfo(char* pStr)
{
    int len = (int)strlen(pStr);
    
    // 원래 문자열 출력
    printf("original : %s", pStr);
 
    // 소문자로 출력
    printf("\ntolower : ");
    for (int i = 0; i < len; ++i)
    {
        printf("%c", tolower(*(pStr + i)));
    }
 
    // 대문자로 출력
    printf("\ntoupper : ");
    for (int i = 0; i < len; ++i)
    {
        printf("%c", toupper(*(pStr + i)));
    }
 
    printf("\n\n");
}
 
int main(void)
{
    char str1[] = "BlockDMask Blog";
    char str2[] = "1 2 3 4 5 6";
    char str3[] = "!@#$%^, aBcDeFg 12345";
 
    printInfo(str1);
    printInfo(str2);
    printInfo(str3);
 
    return 0;
}
 
 
cs

이렇게 tolower('문자'), toupper('문자')를 통해서 대소문자를 변경할 수 있습니다.
알파벳이 아닌 것도 들어간 그대로 나오는 것을 알 수 있습니다.
아스키 코드표에 있는 숫자를 한번 집어넣어 볼까요?


2-2) tolower, toupper 아스키 코드 10진수를 넣어보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<ctype.h>
#include<stdio.h>
 
int main(void)
{
    int r1 = 65//'A'
    int r2 = 'A';
    int r3 = 121//'y'
    int r4 = 'y';
 
    printf("original   : %c = %d\n", r1, r1);
    printf("tolower(%c) : %c = %d\n", r1, tolower(r1), tolower(r1));
    printf("toupper(%c) : %c = %d\n\n", r1, toupper(r1), toupper(r1));
    
    printf("original   : %c = %d\n", r2, r2);
    printf("tolower(%c) : %c = %d\n", r2, tolower(r2), tolower(r2));
    printf("toupper(%c) : %c = %d\n\n", r2, toupper(r2), toupper(r2));
 
    printf("original   : %c = %d\n", r3, r3);
    printf("tolower(%c) : %c = %d\n", r3, tolower(r3), tolower(r3));
    printf("toupper(%c) : %c = %d\n\n", r3, toupper(r3), toupper(r3));
 
    printf("original   : %c = %d\n", r4, r4);
    printf("tolower(%c) : %c = %d\n", r4, tolower(r4), tolower(r4));
    printf("toupper(%c) : %c = %d\n\n", r4, toupper(r4), toupper(r4));
 
    return 0;
}
 
 
cs

인자값으로 10진수 65를 넣던 문자 'A'를 넣던 똑같이 문자 'A'를 가리키는 것을 알 수 있습니다.
tolower, toupper 함수가 아스키 코드 표 10진수를 변경하는 것도 알 수 있습니다.


이상으로 대문자, 소문자 변경함수인 tolower, toupper 함수에 대해 알아보았습니다.
감사합니다.

반응형