두 글자로 된 한글을 입력받아서
초중종성으로 분리한 다음에
구개음화가 일어나는지 판단하는 건데
어디가 잘못된건지 모르겠어..
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 58 | #include <locale.h> #include <stdio.h> #include <windows.h> int main(void) { setlocale(LC_ALL, "Korean"); WORD f1, f2, m1, m2, l1, l2; WORD f, s; // 첫 음절 f, 둘째 음절 s printf("구개음화 판독기 입니다\n두 음절의 단어를 입력해 주세요\n"); printf("첫 음절\n"); wscanf(L"%s", &f); printf("둘째 음절\n"); wscanf(L"%s", &s); f = f - 0xAC00; s = s - 0xAC00; // 초중종성 분해 시작 f1 = f / (0x0015 * 0x001C); m1 = (f / 0x001C) % 0x0015; l1 = f % 0x001C; f2 = s / (0x0015 * 0x001C); m2 = (s / 0x001C) % 0x0015; l2 = s % 0x001C; if (l1 == 0x3137&& f2 == 0x3147 && m2 == 0x3163) // 구개음화 조건 판단 { f1 = 0x3148; l1 = 0; printf("구개음화가 발생합니다\n"); wprintf(L"%s%s%s%s\n %s", f1, m1, f2, m2, l2); } else if (l1 == 0x314c && f2 == 0x3147 && m2 == 0x3163) { f1 = 0x314A; l1 = 0; printf("구개음화가 발생합니다\n"); wprintf(L"%s%s%s%s\n %s-", f1, m1, f2, m2, l2); } else printf("구개음화가 일어나지 않습니다"); return 0; } | cs |
실행하면 어캐나옴? 한줄씩 디버그는 해봤나 - dc Cpp
실행하면 모두다 '구개음화가 일어나지 않습니다'라고만 나옴
한줄씩 해보셨냐고 - dc Cpp
나같으면 30번째 줄에 원하는대로 분해가 되었는지 한번 프린트해보겠음
전부다 null 뜨네..
문제를 찾았네ㅋㅋㅋㅋㅋ
어케 고쳐야되??
미안한디 24-29 원리를 모르겠어ㅋㅋㅋㅋㅋㅋ
인터넷에 한글 초성 중성 종성 분리하는 식이라고 나오길래 가져다 씀
유니코드로 하고있는중임? - dc Cpp
네
유니코드표 찾아보면서 고민해볼까...흠 - dc Cpp
참고한 유니코드표 있으면 링크좀 - dc Cpp
https://drcarter.tistory.com/50?category=99796
일단 저기 나온 공식을 썻고 필요한 초중종성별 유니코드는
http://kor.pe.kr/convert.htm
http://kor.pe.kr/convert.htm이거
써서 찾았ㅇ름
유니코드 테이블 없나..저거 검증을 해봐얄거같은데. 문제없으면 언어에서 쓰는 테이블이 저거랑 같은지 검사해봐얄거같고 - dc Cpp
글쿠만 - dc Cpp
http://www.unicode.org/charts/PDF/U1100.pdf
이거??
유니코드를 썼으면 각각이 하나의 문자로 인식되는거 아님? 그럼 %s가 아니라 %c일것같은디... ㅈㅁ
그래서 c로 써봤는데 두번째 wscan f까지 안가고 바로 종료되서 다시 s로 바꿨어
혹시 한글자 엔터 한글자 엔터 이렇게받음?
ㅇㅇㅇ 첫번째 글자 받고 엔터 두번째 글자받고
내가 '글'이라는 글자 계산기 굴려봤는데.
'글'은 0xAE00, f -= 0xAC00 하면 f == 0x0200.
f1 구하려고 f1 = f / (0x15 * 0x1c) 해보니까 0이 나오더라
그럼 저24~29 식이 잘못된건가?
그래보임. 네가 준 변환기 링크 들어가서 ㄱ, ㄴ, ㄷ 변환해보는데 꽤 골때림ㅋ
ㄱ 3131 ㄲ 3132 ㄳ 3133 ㄴ 3134 ㄷ 3137 ??
ㄵ ㄶ가 있군
http://www.unicode.org/charts/PDF/U1100.pdf
이건 어떤거 같아??
초성 종성 따로나뉘어있노; 흠
분해 시발 골때리네ㅋㅋㅋ
위에 새로운 표로 값 수정해서 바꿔봤는데
출력이 그냥 정수값으로 뜨네
http://www.unicode.org/charts/PDF/U1100.pdf
이걸로 바꿨다고? 에바지ㅋ
어.. 그럼 뭐로 바꾸지??
일단 유니코드 변환기에 들어있는게 정확함.ㅇㅇ
각 갂 갃 간 갅 갆 갇 갈 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 검 겁 겂 것 겄 겅 겆 겇 겈 겉 겊 겋 게 겍 겎 겏 겐 겑 겒 겓 겔 겕 겖 겗 겘 겙 겚 겛 겜 겝 겞 겟 겠 겡 겢 겣 겤 겥 겦 겧 겨 격 겪 겫 견 겭 겮 겯 결 겱 겲 겳 겴 겵 겶 겷 겸 겹 겺 겻 겼 경 겾 겿 곀 곁 곂 곃 계 곅 곆 곇 곈
이런거 전부 타뷸레이션 해두면 안되냐?
아 표에 있는거 싹다?
야 구개음화가 일어나야하는 단어 하나만 대봐
흠 일단...
'다'-'나' != '나'-'가'인데, 그 이유는 중간에 '까'가 있기때문임.ㅋㅋ
굳이를 입력하면 구지가 되야되고, 같이를 입력하면 가치가 되야됨
가 - 까 - 나 - 다 - 따 - 라 ... 이 유니코드는 24C씩 증가함
그러므로 초성이 하나씩 바뀐다고 하면 24C..그렇군
0x15 * 0x1c = 0x24c인데, 저 블로그? 작성자는 이걸 이용해서 초성을 구하려고 했음
한데 저런식으로 구하려면 'ㄱ' == 0이 되어야하지만, 'ㄱ' == 0x3131이다.
그렇다면 식은 f1 = f / (0x0015 * 0x001C) + 0x3131;이 되면 되는가? 아니오. ㄳ 같은 글자는 초성에 올 수 없음ㅋㅋㅋㅋㅋㅋㅋㅋ
그렇다면...초성에 올 수 있는 글자들을 타뷸레이션 해보자고?
그러니까 f1 자리에 올 수 있는 글자들을 전부 타뷸레이션 해놓으라는거지??
초성 배열을 하나 만들어서 저장하자. {'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'} 이렇게 들어가겠지?
해서 f1값이 나오면 그 값을 인덱스로 방금 만든 배열에서 해당 인덱스에 접근하면 해당하는 초성 찾기가능.
중성이랑 종성은 어찌할까...생각해보자
뭐 비슷할거 같은데?ㅇㅇ...
아하.. 해볼게 고마워
암튼 중성 종성도 규칙찾아서 해보자
종성은 유니코드가 초성이랑 다른데? 초성이랑 또 universal한거랑 또 다르고... 어떻게 해야할지 고민좀 해야할듯
f1값을 바로 한글로 바꿀 수는 없나?
f가 한글이고 f1은 '가'를 offset으로 다른 글자의 위치('가'로부터 얼마나 떨어져있는지)를 계산하기 위한 변수임
'나'는 0x24c * 2만큼 떨어져있고, 0x24c씩 떨어질때마다 초성이 바뀜. ㄱ - ㄲ - ㄴ.
f1이 0이 나온다면 arr f[0] 같은식으로 접근하면 되겠지?
'나'라면 f1 == 2, f[2] == 'ㄴ' 이런식이지
바로 바꾸려면 결국 네가 그에 해당하는 유니코드 값을 다 알고있어야함. 근데 사이사이에 초성에 올 수 없는 글자도 포함돼서 귀찮으니 타뷸레이션 해두란거엿음
그러면 받침에 ㄷ들어가는 단어를 하나 위에 쓰고 그 단어를 초중종성 분리해서 나온 값이랑 l1이랑 같은지 비교하는걸로 해볼까? 구개음화가 일어나는 조건에 필요한 초성중성종성이 들어가는 단어를 미리 분리해두고 값만 비교한느겅미
아하....