#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>

#define code -44032 // 문자 코드에서 "가"를 처음으로 놓기 위한 값

char *ChoSungTable[] = {"ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ",
                      "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ",
                      "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"};
char *JungSungTable[] = {"ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ",
                         "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ",
                         "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"};
char *JongSungTable[] = {"", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ",
                         "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ",
                         "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ",
                         "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"};

int HanDivPas(const char* sHanGeul, char* ChoSung, char* JungSung, char* JongSung);
int HanAssPas(const char* ChoSung, const char* JungSung, const char* JongSung, char* sHanGeul);

int main(int argc, char* argv[]){
   
   char cho[10], jung[10], jong[10], han[10];
   
   HanDivPas("&#46618;", cho, jung, jong);

   printf ("%s, %s, %s", cho, jung, jong);

   HanAssPas("ㄸ","ㅗ","ㄻ", han);
   
   return 0;
}

int HanDivPas(const char* sHanGeul, char* ChoSung, char* JungSung, char* JongSung) {

   int iChoSung, iJungSung, iJongSung;
   int iCode;

   WCHAR buffer[100];

   MultiByteToWideChar(CP_ACP, 0, sHanGeul, strlen(sHanGeul), buffer, 100);
   iCode = (int)buffer[0];
   
   iCode = iCode + code;

   if (iCode < 0) { return -1; }

   iChoSung = (int)(iCode/(21*28));
   
   iCode = (int)(iCode % (21*28));

   iJungSung = (int)(iCode/28);
   iJongSung = (int)(iCode % 28);
   
   strcpy(ChoSung, ChoSungTable[iChoSung]);
   strcpy(JungSung, JungSungTable[iJungSung]);
   strcpy(JongSung, JongSungTable[iJongSung]);

   return 0;
}

int HanAssPas(const char* ChoSung, const char* JungSung, const char* JongSung, char* sHanGeul) {
   
   int iChoSung, iJungSung, iJongSung, iHan;
   int iIndx;

   for(iIndx =0; iIndx<19; iIndx++){
       if (ChoSung == ChoSungTable[iIndx]) {
           iChoSung = iIndx;
           break;
       }
   }

   for(iIndx=0; iIndx<21; iIndx++){
       if (JungSung == JungSungTable[iIndx]) {
           iJungSung = iIndx;
           break;
       }
   }

   for(iIndx=0; iIndx<21; iIndx++){
       if (JongSung == JongSungTable[iIndx]) {
           iJongSung = iIndx;
           break;
       }
   }
   
   iHan = ((iChoSung * 21 + iJungSung) * 28 + iJongSung - code);
   WCHAR pcTemp[10];
   pcTemp[0] = (WCHAR)iHan;
   pcTemp[1] = "\0";

   WideCharToMultiByte(CP_ACP, 0, pcTemp, strlen((char*)pcTemp), sHanGeul, strlen(sHanGeul),
NULL, NULL);
   printf("%s", sHanGeul);

   return 0;
}

Trackback Address :: http://couple.haruschool.com/tc/trackback/37

댓글을 달아 주세요