Coding & Programming/C, C++

[C/C++] 라이브러리 함수(isalnum, isalpha, isupper, islower, isdigit, isspace)를 이용하여 문자열 내 알파벳, 대소문자, 공백, 숫자 식별(분류)하기 + 대소문자 변환(toupper, tolower)하기

mainCodes 2021. 4. 13. 10:50

[C/C++] 라이브러리 함수(isalnum, isalpha, isupper, islower, isdigit, isspace)를 이용하여 문자열 내 알파벳, 숫자, 영어 대소문자, 공백 식별하기 + 대소문자 변환(toupper, tolower)하기

 

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و

 

지난 번에는 별도의 C/C++ 라이브러리를 사용하지 않고 ASCII 코드 테이블만을 이용하여 사용자가 입력한 문자열 내에서 알파벳 대소문자, 공백, 숫자 등을 식별하여 분류하였습니다.

 

※ 참고: [C/C++] ASCII 값을 이용하여 문자열 내 알파벳, 대소문자, 공백, 숫자 식별(분류)하기 + 대소문자 변환하기

 

지난 번 자료에서 조금 더 고민해 보면 m_isdigit(), m_isalpha(), m_isalnum(), m_isupper(), m_islower() 등과 같이 C/C++에서 제공해 주는 라이브러리와 유사하게 사용자 정의 함수를 만들어 보는 것도 좋은 스터디 방법으로 생각됩니다.

 

사용자 정의 함수로 직접 구현한 알파벳, 대소문자, 숫자 구별하기 예제(Example):

 

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
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <string.h>
 
int m_isalpha(int c)
{
    return ((c >= 'a' && c <= 'z'|| (c >= 'A' && c <= 'Z'));
}
 
int m_isupper(int c)
{
    return ((c >= 'A' && c <= 'Z'));
}
 
int m_islower(int c)
{
    return ((c >= 'a' && c <= 'z'));
}
 
int m_isdigit(int c)
{
    return (c >= '0' && c <= '9');
}
 
int m_isalnum(int c)
{
    return (m_isalpha(c) || m_isdigit(c));
}
 
int main()
{
    char input[50= "123! HelloWorld! #&%^*&(";
    char a;
 
    for (int i = 0; i < strlen(input); i++)
    {
        a = input[i];
        if (m_isalnum(a))
        {
            if (m_isalpha(a))
                printf("%c = 알파벳\n", a);
            else if (m_isdigit(a))
                printf("%c = 숫자\n", a);
            else
                printf("%c = 기타 문자\n", a);
        }
        else
            printf("%c = 기타 문자\n", a);
    }
 
    return 0;
}
cs

 

사용자 정의 함수를 이용한 방법과 C/C++ 라이브러리를 이용한 방법은 난이도가 높거나 또는 낮거나를 판단하는 것은 의미가 없으며 다만 코딩시 알아두면 유용한 정보가 되리라 생각됩니다. 이번에는 C/C++ 라이브러리를 이용하여 같은 결과를 도출해 보고자 합니다. 과정은 사용자 정의 함수를 이용한 방법과 크게 다르지 않습니다.

C/C++ 라이브러리를 이용한 대소문자, 숫자, 공백 등 식별하기 예제(Example):

 
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int main()
    char input[50= "";
    char c;
 
    printf("문자열을 입력하세요(예;\"Hello World! 123AbcDEf !@#@\"):");
    gets_s(input);
 
    for (int i = 0; i < strlen(input); i++)
    {
        c = input[i];
        if (isalnum(c))
        {
            if (isalpha(c))
            {
                if (isupper(c))
                    printf("%c 는 알파벳 소문자\n", c);
                else if (islower(c))
                    printf("%c 는 알파벳 대문자\n", c);
                else
                    printf("알 수 없음\n");
            }
            else if (isdigit(c))
                printf("%c 는 숫자\n", c);
        }
        else if (isspace(c))
            printf("%c 는 공백\n", c);
        else
            printf("%c 는 기타 문자\n", c);
 
    }
 
    //모두 대문자로 변경
    printf("모든 알파벳을 대문자로 변경: ");
    for (int i = 0; i < strlen(input); i++)
        putchar(toupper(input[i]));
    putchar('\n');
 
    //모두 소문자로 변경
    printf("모든 알파벳을 소문자로 변경: ");
    for (int i = 0; i < strlen(input); i++)
        putchar(tolower(input[i]));
    putchar('\n');
 
    return 0;
}
cs

실행결과(Output):

 

실행결과 문자를 정상적으로 구분하였습니다. 예제코드에는 알파벳을 대문자로 변경하는 toupper()와 소문자로 변경하는 tolower()함수 사용법도 포함되어 있습니다. 이상 JollyTree였습니다 (•̀ᴗ•́)و