C에서 한글을 다루는 방법에 대한 질문입니다

kid1402의 이미지

지금 하고자 하는게, 한글을 한자 한자 입력받아서 이게 한글의 글자가 되는지 아닌지를 초성/중성/종성 등을 통해 판단하는 프로그램을 만들려고합니다.
그래서 c++ 로 한글을 다루는 방법을 찾아보고 있는 중인데
일단 wchar_t, wprintf, putwchar로 한글 한자를 입력받아서 출력하는것까진 이해를 했습니다

제가 하고자 하는 것을 위한 것은 구글링을 아무리 해도 찾을수가 없어서 질문을 드립니다. ㅠㅠ
질문하고자 하는 것은 다음입니다...

1. 한글 한자가 있을 때 이 글자로부터 초성/종성/종성을 쪼갤 수 있나요?
wchar_t tmp = L'가';
라고 선언되어 있는 변수가 있다면 tmp라는 변수로부터 'ㄱ', 'ㅏ', '\0'(마지막에 종성받침이 없는걸 뭐라고 표현해야할지 모르겠네요.. 널문자가 맞을런지??) 라는 한글의 기본 요소들을 이끌어 낼 수 있을까요?

2. 위의 영어입력 상태에서 한글을 입력받는 포맷으로 할 때 가장 큰 걸림돌이라고 생각되는게 있습니다...
예를 들어 'rlaTl' 가 입력됬다면, 사람이야 한영키 바꿔서 타이핑하든 아님 키보드 외운채로 생각하든 해서 저게 '김씨'라는 한글 단어를 나타내는걸 알지만 프로그램은 그걸 모르겠죠..
그래서 저런 식으로 영어가 입력이 됬을 때 이걸 적절하게 한글로 매핑시켜주는게 가장 힘들것 같아요..
생각해보니 이건 영어로 입력받는게 아니라 한글로 입력받는것이라도 프로그램 성격상 'ㄱㅣㅁㅆㅣ' 이런 형태로 입력받을 거라 적절한 한글 매핑은 두 형식 다 문제네요.

어떻게 해야할지 조언이라도 여쭙고 싶습니다 .ㅠㅠ

oosap의 이미지

한글입력 오토마타 소스와 알고리즘을 찾아보셔야 할거예요. 오픈소스가 있는지 모르겠네요..
제가 경험한 바에 의하면, "한글" 입력은 이와 같이 되더군요.

g ㅎ ㅎ
k ㅏ 하
s ㄴ 한(완료)
r ㄱ ㄱ(새글자)
m ㅡ 그
f ㄹ 글

"하글" 입력은 이렇게

g ㅎ ㅎ
k ㅏ 하
r ㄱ 학(미완)
m ㅡ 하(완료)그
f ㄹ 글

중요한건 완료가 되는 시점 입니다. '하' 까지 써진 다음에 '학' 이 되더라도 아직 한 글자가 완료된게 아니예요. 그래서 다음 입력되는 키를 살펴봅니다. 다음에 자음이 오면 '학' 으로 완료 시키지만 다음에 모음이 오면 '하'로 완료시키고 'ㄱ'은 다음 모음에 붙여서 새 글자를 만들죠.

여기에서 각 단계마다 만들어지는 글자가 화면에 출력이 되죠. 자음과 모음으로 분리하는 것은 가능한지 잘 모르겠구요..

도움도 못될 것을 늘어놓은건 아닌지 모르겠네요.. 이와 관련된 오토마타 알고리즘은 찾아보면 많을거예요..

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

kid1402의 이미지

오토마타 관련 수업을 듣는 중이라 교수님께서 한글 오토마타 관련 내용 수업은 이미 하셔서 DFA는 이미 짜놨어요..
그래서 gksrmf이 입력됬을때 이게 완전한 글자로 인식되는지 안되는지(accept or not accept)는 판별할 수 있는데
이렇게 입력된 gksrmf을 온전한 '한글'로 출력하는걸 어떻게해야할지 몰라서 질문을 드린겁니다 ㅠㅠ

ohdh2003의 이미지

http://wyb330.egloos.com/3048787 한글 코드를 이해하면 분해 가능합니다. 이 페이지는 unicode인 경우입니다.

It is better--much better--to have wisdom and knowledge than gold and silver [Proverbs 16.16]

sheep의 이미지

한글 관련 오프소스는 libhangul 찾아보시면 되는데...

문제는 kldp.net이 먹통이라는것..

--------
From Buenos Aires, Argentina
No sere feliz pero tengo computadora.... jaja
닥치고 Ubuntu!!!!!
To Serve My Lord Jesus
blog: http://sehoonpark.com.ar
http://me2day.net/sheep

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.