오, 우연히 발견한 코드를 약간 고쳐봤습니다.
Console.WriteLine(한글도우미.자소결합('ㄷ', 'ㅏ', 'ㄺ'));
Console.WriteLine(한글도우미.자소결합('ㄱ', 'ㅏ', ' '));
Console.WriteLine(한글도우미.자소분리('닭'));
Console.WriteLine(한글도우미.자소분리('가'));
static class 한글도우미
{
private const string _초성 = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";
private const string _중성 = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ";
private const string _종성 = " ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ";
private const char _한글코드시작 = (char)0xAC00;
private const char _한글코드끝 = (char)0xD79F;
public static char 자소결합(char 초성, char 중성, char 종성)
{
var ci1 = _초성.IndexOf(초성);
var ci2 = _중성.IndexOf(중성);
var ci3 = _종성.IndexOf(종성);
if (ci1 is -1 || ci2 is -1 || ci3 is -1)
throw new InvalidOperationException();
var result = _한글코드시작 + (ci1 * 21 + ci2) * 28 + ci3;
return (char)result;
}
public static (char 초성, char 중성, char 종성) 자소분리(char 한글자)
{
if (한글자 is < _한글코드시작 or > _한글코드끝)
return (' ', ' ', ' ');
int 코드 = 한글자 - _한글코드시작;
var ci1 = 코드 / (21 * 28);
코드 = 코드 % (21 * 28);
var ci2 = 코드 / 28;
코드 = 코드 % 28;
var ci3 = 코드;
return (_초성[ci1], _중성[ci2], _종성[ci3]);
}
}
| 출력
닭
가
(ㄷ, ㅏ, ㄺ)
(ㄱ, ㅏ, )
| 출처