유니코드 한글 문자열 조합형으로 변환 후 출력하기
프로그래밍 언어/C++2010. 9. 29. 16:06
유니코드를 입력하여 초성, 중성, 종성으로 분리 후 출력하는 예제
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 52 53 54 55 56 57 | #include "stdafx.h" #include <iostream> #include <locale> int start[3] = {0x1100, 0x1161, 0x11A8 - 1}; int value, cho, jung, jong; bool extract(wchar_t *str) { // 변수 초기화 value = cho = jung = jong = 0; // 문자열 검사 (한글만 입력되었는가?) for(int i = 0; i<wcslen(str); i++) { // 유니코드 한글 문자열 범위 검사 (0xAC00 ~ 0xD7A3) if(str[i] < 0xAC00 || str[i] > 0xD7A3) { if(str[i] == 0x20) continue; return false; } } for(int i = 0; i<wcslen(str); i++) { // 공백 검사 if(str[i] == 0x20) { wprintf(L" "); continue; } value = str[i] - 0xAC00; jong = value % 28; jung = ((value - jong) / 28) % 21; cho = ((value - jong) / 28 ) / 21; if(jong == 0x11A8) jong = 0; cho += start[0]; jung += start[1]; jong += start[2]; wprintf(L"%c %c %c", cho, jung, (jong == 0x11A8-1) ? NULL : jong); } printf("\n\n"); return true; } int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "Korean"); wchar_t str[] = L"급할수록 돌아가라"; wprintf(L"입력 : %s\n변환 : ", str); if(!extract(str)) printf("한글 문자만 입력이 가능합니다\n"); return 0; } |
'프로그래밍 언어 > C++' 카테고리의 다른 글
[해결] LIBCMT.lib error LNK 2005: MSVCRT.lib에 이미 정의되어 있습니다 (0) | 2011.05.05 |
---|---|
zlib 라이브러리를 이용한 파일 압축 해제 클래스 작성 (1) | 2010.10.26 |
c언어 자료형 (0) | 2010.09.08 |
2. CORBA와 DCOM의 비교 (0) | 2010.07.04 |
1. COM, COM+, DCOM, ATL의 개념 (0) | 2010.07.04 |