Contents

Develop
2015.11.10 15:49

[c] 한글 문자열 출력

조회 수 3128 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

영어는 1byte, 한글은 2byte 차지한다.

따라서 문자열 처리할 때 한 포인터씩 출력을 하게 되면 한글이 깨지는 현상이 발생한다.

예를 들어 한글과 영어가 섞여있는 문자열을 출력할 때 다음과 같은 소스를 이용하면 한글이 깨져서 출력된다.

 

#include <stdio.h>
#include <stdlib.h>

const int MAX_SIZE = 1000;


int main(){
    FILE *fp = fopen("test.txt","r");
    char* inp = (char*)malloc(sizeof(char)*MAX_SIZE);
    int i;

    while(fgets(inp, MAX_SIZE, fp)){

        printf("%s" , inp);

        for(i = 0 ; i < strlen(inp) ; i++){
            printf("%c  " , inp[i]) ;
        }
        printf("\n");
    }
    
    return 0;
}

 

 

그렇다면, 한글과 영어를 판단해서 영어는 1byte, 한글은 2byte를 출력해야 할텐데,

어떻게 하면 한글인지 영어인지 확인할 수 있을까?

 

#include <stdio.h>
#include <stdlib.h>

const int MAX_SIZE = 1000;

typedef enum {false, true} bool;

int main(){
    FILE *fp = fopen("test.txt","r");
    char* inp = (char*)malloc(sizeof(char)*MAX_SIZE);
    int i;
    bool HANGUL = false;


    while(fgets(inp, MAX_SIZE, fp)){

        printf("%s" , inp);

        for(i = 0 ; i < strlen(inp) ; i++){
            if((inp[i] & 0x80) == 0x80) HANGUL = true; //한글인지 확인
            if(!HANGUL)printf("%c  " , inp[i]) ; //아니면 그냥 출력
            else{
                printf("%c%c" , inp[i] , inp[i+1]); //한글이면 2byte 출력
                i++;
            }
            HANGUL = false;
        }
        printf("\n");
    }
    
    return 0;
}

 

위의 소스는 각 char 마다 한글인지 아닌지를 판단해서 한글인 경우 2byte를 출력하게 해준다.

 


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
795 Develop [php] Laravel 5.4: Specified key was too long error file hooni 2017.12.04 42516
794 Develop [php] mysql_ 과 mysqli_ 의 차이 hooni 2017.12.01 3914
793 Develop [ios] VIN Scanner (VIN barcode) 스캐너 file hooni 2017.09.16 2262
792 Develop [android] 안드로이드 앱 문서 샘플 file hooni 2017.07.11 4045
791 Develop [coding] 공부해야 하는거 ㅋㅋ secret hooni 2017.06.27 0
790 Develop [coding] Find all anagrams in a string hooni 2017.06.27 3847
789 Develop [android] SQLiteOpenHelper를 이용한 DBManager hooni 2017.06.14 3564
788 Develop [android] 간단한 SQLIite 예제 hooni 2017.06.14 3007
787 Develop 캘리포니아 운전면허 족보 file hooni 2017.06.12 2814
786 Develop 사이버보안실무 발표자료 (2017.06.08) file hooni 2017.06.05 9579
785 Develop 리팩토링 계획안 file hooni 2017.05.15 2345
784 Develop [ios] 코코아 프로그래밍의 네이밍 룰(명명 규칙) hooni 2017.05.11 2786
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 71 Next
/ 71