'programming/C_C++'에 해당되는 글 279건

  1. 2014.03.18 한글인지 영문인지 체크

반응형

출처 불명 - 인터넷 어딘가에서 ...

 

함수원형 : int ishangul(unsigned char *str, int index);
인    자 : str은 검사대상 문자열, index는 배열첨자식 str내의 위치
반환  값 : 0 : 영문자 , 1 : 한글첫째바이트, 2 : 한글둘째바이트


#include <stdio.h>
#include <string.h>

#define IS_LOW_ASC       0  /* 128 미만의 아스키코드 */
#define IS_HIGH_ASC      1  /* 128 이상의 아스키코드 */

#define IS_ENGLISH       0  /* 상태 0 */
#define IS_HANGUL_FIRST  1  /* 상태 1 */
#define IS_HANGUL_SECOND 2  /* 상태 2 */

typedef unsigned char byte;

int  ishangul(byte *str, int index)
{
  int state;
  int inMode;
  int key;
  int i = 0;

  if (strlen(str) < index + 1) return -1; /* 문자열길이가 index보다 작다면 */

  state = IS_ENGLISH;        /* 상태0으로 초기화 */

  while ((key = *(str + i)) != '\0') { /*문자열의 끝까지 */

    if (key < 128) inMode = IS_LOW_ASC;

    else inMode = IS_HIGH_ASC;

    switch (state) {

      case IS_ENGLISH :       /* 상태0이고 128이상의 문자라면 한글 첫째 */
        if (inMode) state = IS_HANGUL_FIRST;
        else state = IS_ENGLISH; /* 그외에는 영문자 */
        break;

      case IS_HANGUL_FIRST : /* 한글첫째상태라면 한글둘째 */
        state = IS_HANGUL_SECOND;
        break;

      case IS_HANGUL_SECOND  : /* 한글 둘째 상태라면 */
        if (inMode) state= IS_HANGUL_FIRST; /* 128이상이라면 한글첫째 */
        else state = IS_ENGLISH;    /* 128미만이라면 영문자 상태 */
        break;

    }

    if (i++ == index) break; /* 찾는 인덱스까지 검사했다면 */

  }

  return state;  /* 한글의 종류를 리턴 */

}

 

 

반응형
Posted by 공간사랑
,