본문 바로가기

C/C++/예제

[C 예제] 문자열 안에 있는 각문자들 카운트

반응형

문자열 안에 있는 한글, 알파벳, 특수문자, 숫자의 카운트를 출력해주는 소스.

 

소스.

#include 
#include 
int main()
{
    char buf[100] = "TEST123#TE스트1테스T2*";
    unsigned char bit;
    int len = 0;
    int i = 0;
    int n_cnt = 0, e_cnt = 0, k_cnt = 0, g_cnt = 0;
    len = strlen(buf);
    for(i = 0; i < len; i++)
    {
        bit = buf[i];
        if(bit == 32)   // ' '
            continue;
        else if(bit > 47 && bit < 58)   // 숫자.
            n_cnt++;
        else if((bit > 64 && bit < 91) || (bit > 97 && bit < 123)) // 영어. 소문자, 대문자.
            e_cnt++;
        else if(bit > 0xb0)  // 한글.
        {
            i++;
            k_cnt++;
        }
        else          // 특문.
            g_cnt++;
    }                                                                                       
    printf("숫자 : [%d]\n", n_cnt);
    printf("한글 : [%d]\n", k_cnt);
    printf("영어 : [%d]\n", e_cnt);
    printf("특문 : [%d]\n", g_cnt);              
    return 0;
} 

 

결과 화면.

 

 

 

각 문자들을 카운트 하는 원리는 아스키 코드 값과 같은 코드 덕분 이다.

 

각문자들에는 아스키코드 라는 값이 정해져 있어서,

내가 원하는 문자의 아스키코드 범위만 알고 있다면

위의 소스와 같이 얼마든지 몇개의 문자가 들어가 있는지

카운트가 가능하다.

 

추가로 한글 같은 경우는 아스키코드표가 아닌 KS5601 문서를 보면

0xB0 부터 시작된다는걸 알수 있다.

또한 한글은 알파벳과 달리 한글자에 2자리의 공간을 잡아 먹으니 알파벳이나 숫자와 달리 한칸씩 더 지나가게 해줘야 한다.

 

좀더 완벽한 카운트를 원한다면 다양한 언어의 값이 나와있는 표를 보고 범위를 설정해주고,

각 나라의 언어 특성에 맞게 조건을 추가해주면 된다.

 

 

 

아스키코드 와 KS5601, 유니코드 등이 있는데 해당 정보는 제 블로그에 있으니 링크 걸어드릴게요 ~


아스키코드표

http://ycswarm.tistory.com/66

KS5601 및 유니코드 표

http://ycswarm.tistory.com/58



반응형

'C/C++ > 예제' 카테고리의 다른 글

[C 예제] 선택 정렬 과 검색.  (0) 2014.05.30
[C 예제] 영화관 좌석 예매.  (0) 2014.05.30
[C++ 예제] 삽입, 선택 정렬  (0) 2014.05.29
[C 예제] 간단한 주사위 게임.  (0) 2014.05.29
[C 예제] 구구단 출력 하기.  (0) 2014.05.29