C 언어, 한글 초성 분리
글. 오상문 sualchi@daum.net
DevCpp에서 유니코드 영역 기준으로 한글 초성을 구하려는데
윈도우 환경에서 CP949 코드를 사용하기에 다른 방법을 시도해봤습니다.
직접 글자를 비교하는 방법으로 초성을 구해봤는데 대충 맞는 것 같습니다.
한글 코드가 자모순서(사전순)로 코드가 정렬되어 있다고 가정한 것입니다.
다만 일부 특수문자는 한글 코드 영역으로 오인하는 경우가 있었습니다.
/* 한글 초성 얻는 프로그램
* C 언어 콘솔 프로그램 chosung.c
* Windows 10 pro, DevCpp 5.11
* 2018.07.13 by Sangmun Oh (sualchi@daum.net)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 문자열에서 한글 초성만 돌려주는 함수
// s : 초성을 구할 문자열
// cho: 초성을 담을 공간
// size: cho 크기
// 반환값: 초성 개수
int getChosung(const char* s, char* cho, int size)
{
int i, j;
int cnt, cho_index;
char han[3] = {0,};
static char * cho_list[] = {"", //index: 1(ㄱ)~14(ㅎ)
"ㄱ","ㄴ","ㄷ","ㄹ","ㅁ","ㅂ","ㅅ","ㅇ","ㅈ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"};
for(i=j=cnt=0; s[i] && i < size; i++) {
if((unsigned char)s[i] & 0x80) { // 한글이면...
han[0] = s[i++]; // 한글(2바이트) 첫 바이트 분리
han[1] = s[i]; // 한글 다음 바이트 분리
// 시작, 끝 글자 범위인지 확인해서 초성 구함
if(strcmp("가",han)<=0 && strcmp("나",han)>0)
cho_index = 1; // ㄱ
else if(strcmp("다",han)>0) cho_index = 2; // ㄴ
else if(strcmp("라",han)>0) cho_index = 3; // ㄷ
else if(strcmp("마",han)>0) cho_index = 4; // ㄹ
else if(strcmp("바",han)>0) cho_index = 5; // ㅁ
else if(strcmp("사",han)>0) cho_index = 6; // ㅂ
else if(strcmp("아",han)>0) cho_index = 7; // ㅅ
else if(strcmp("자",han)>0) cho_index = 8; // ㅇ
else if(strcmp("차",han)>0) cho_index = 9; // ㅈ
else if(strcmp("카",han)>0) cho_index = 10; // ㅊ
else if(strcmp("타",han)>0) cho_index = 11; // ㅋ
else if(strcmp("파",han)>0) cho_index = 12; // ㅌ
else if(strcmp("하",han)>0) cho_index = 13; // ㅍ
else cho_index = 14; // ㅎ
cho[j++] = cho_list[cho_index][0]; // 초성 상위 바이트 저장
cho[j++] = cho_list[cho_index][1]; // 초성 하위 바이트 저장
cnt++; // 초성 개수
}
}
cho[j] = 0; // 문자열 널 종료 문자 추가
return cnt; // 초성을 구한 개수
}
int main(int argc, char *argv[])
{
char * str = "수알치 다산영재학원 대한민국만세 123abc!";
char cho_str[101] = "";
getChosung(str, cho_str, 100);
printf("입력 내용: %s\n", str);
printf("한글 초성: %s\n", cho_str);
return 0;
}
<이상>
'C' 카테고리의 다른 글
C 언어 동영상 강의 (입문부터 게임 개발까지) (0) | 2021.06.08 |
---|---|
C 언어 scanf 함수에서 공백 포함된 문장 입력받기 (0) | 2021.04.30 |
C 언어, 문자열 슬라이싱(일부분) 복사하기 (0) | 2020.09.28 |
C 언어, 달팽이 배열 출력 (0) | 2020.08.18 |
C 언어, 이진수 출력하기 (0) | 2020.08.04 |