유니코드에서 한글문자의 위치 : 0xAC00 ~ 0xD7A3
초성 ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ [19]
중성 ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ[21]
종성 ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ [28]
하나의 초성에 21개의 중성이 있고, 21개의 중성엔 각각 28개의 종성이 존재한다.
28개*21줄*19단락=11172개의 문자
========================
샘플코드
========================
#include <iostream>
using namespace std;
wchar_t Chosung[19] = {L'ㄱ',L'ㄲ',L'ㄴ',L'ㄷ',L'ㄸ',L'ㄹ',L'ㅁ',L'ㅂ',L'ㅃ',L'ㅅ',L'ㅆ',L'ㅇ',L'ㅈ',L'ㅉ',L'ㅊ',L'ㅋ',L'ㅌ',L'ㅍ',L'ㅎ'};
wchar_t JungSung[21] = {L'ㅏ',L'ㅐ',L'ㅑ',L'ㅒ',L'ㅓ',L'ㅔ',L'ㅕ',L'ㅖ',L'ㅗ',L'ㅘ',L'ㅙ',L'ㅚ',L'ㅛ',L'ㅜ',L'ㅝ',L'ㅞ',L'ㅟ',L'ㅠ',L'ㅡ',L'ㅢ',L'ㅣ'};
wchar_t JongSung[28] = {L' ',L'ㄱ',L'ㄲ',L'ㄳ',L'ㄴ',L'ㄵ',L'ㄶ',L'ㄷ',L'ㄹ',L'ㄺ',L'ㄻ',L'ㄼ',L'ㄽ',L'ㄾ',L'ㄿ',L'ㅀ',L'ㅁ',L'ㅂ',L'ㅄ',L'ㅅ',L'ㅆ',L'ㅇ',L'ㅈ',L'ㅊ',L'ㅋ',L'ㅌ',L'ㅍ',L'ㅎ'};
int _tmain(int argc, _TCHAR* argv[])
{
char buff[30];
wchar_t wc[] = L"왜 결혼하기 싫은거야?";
// wcout에서 정상적으로 한글을 출력해주기 위해 필요한 작업
wcout.imbue(locale("kor"));
for(unsigned int i=0;i<wcslen(wc);i++) {
if(wc[i] >= 0xAC00 && wc[i] <= 0xD7A3) {
wcout << "[" << Chosung[((wc[i]-0xAC00)/(21*28))] << "]";
wcout << "[" << JungSung[((wc[i]-0xAC00)/28)%21] << "]";
wcout << "[" << JongSung[(wc[i]-0xAC00)%28] << "]";
} else {
wcout << wc[i];
}
wcout << endl;
}
scanf(buff);
return 0;
}
===========================
출력결과
===========================
[ㅇ][ㅙ][ ]
[ㄱ][ㅕ][ㄹ]
[ㅎ][ㅗ][ㄴ]
[ㅎ][ㅏ][ ]
[ㄱ][ㅣ][ ]
[ㅅ][ㅣ][ㅀ]
[ㅇ][ㅡ][ㄴ]
[ㄱ][ㅓ][ ]
[ㅇ][ㅑ][ ]
?
boot.ini