출처 불명 - 인터넷 어딘가에서 ...
함수원형 : 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; /* 한글의 종류를 리턴 */
}