본문으로 바로가기
728x90
반응형
strcoll() 함수의 헤더 파일
#include <string.h>

 

strcoll() 함수의 원형
int strcoll(const char * str1, const char * str2);

 

Parameter
str1
비교할 첫 번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있다.

str2
비교할 두번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있다.

 

리턴 값
세 가지 형태로 리턴됩니다.

1. str1이 str2보다 클 경우 => 0보다 큰 값을 리턴
(첫 번째 인자의 문자가 두 번째 인자의 문자보다 큰 경우)

2. str1이 str2보다 작은 경우 => 0보다 작은 값을 리턴
(첫 번째 인자의 문자가 두 번째 인자의 문자보다 작은 경우)

3. str1과 str2가 같을 경우 => 0을 리턴
(첫번째 인자와 두 번째 인자의 문자가 모두 같을 경우)

※자세한 사항은 아래에 기재되어 있어요※

 

strcoll() 함수는 strcmp() 함수와 거의 유사합니다.

다만 srtcoll() 함수는 LC_COLLATE 설정에 따라 정의되어 있는 방식으로 비교를 합니다.

 

strcoll() 함수의 동작원리는 strcmp() 포스팅을 참조하시면 좋을 것 같아요.

[C언어] String.h 라이브러리 함수 - strcmp() 함수 파헤치기(문자열을 비교, 같은 문자열 찾기)

 

[C언어] String.h 라이브러리 함수 - strcmp() 함수 파헤치기(문자열을 비교, 같은 문자열 찾기)

strcmp() 함수의 헤더 파일 #include strcmp() 함수의 원형 int strcmp(const char * str1, const char * str2); Parameter str1 비교할 첫 번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있..

idsn.tistory.com

 

 

Θ LC_COLLATE란 무엇인가요?

 

쉽게 말해서 언어 설정이라고 보시면 되요.

 

 각 나라마다 문자 세트와 인코딩 방법이 달라 다른 나라간의 상호 호환성이 안 좋았어요. 예를 들어 한국은 KS X 1001 문자 세트에 EUC_KR, CP949 인코딩을 사용하고 중국은 GB 문자 세트에 GB 2312, GBK, GB 18030 인코딩 방식을 사용하는 식이였어요. 그러다보니 호환성이 떨어져 외국 사이트를 볼 때 글자가 깨져서 보이는 경우가 있었죠. 그래서 전 세계의 문자를 하나의 문자 세트로 통일하고( unicode ) 이를 기반으로 한 인코딩 방식을 만든 것이 UTF ( Unicode Transformation Format ) 예요. UTF 를 이용하면 전 세계의 글자를 하나의 페이지에서 모두 볼 수가 있어요.

 

이렇게 하나의 UTF 방식으로 모든 문자를 표현 할 수 있기 때문에 LC_COLLATE을 이용하여 사용자가 원하는 언어 환경을 만들 수 있도록 만들어 놓은거예요.

 

보통 아래와 같이 표현해요.

 

리눅스 상에서 locale 명령어를 쳐보면 현재 사용되고 있는 LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME 등등을 알 수 있어요.


제 리눅스는 en_US.UTF-8 형식으로 미국 언어로 설정되어 있네요.

 

 

Θ strcoll() 함수는 어떻게 사용할까요?

보통 아래와 같이 많이 사용해요. setlocale 함수로 원하는 언어를 설정하고 비교를 해요.

또한 strxfrm() 함수도 같이 사용하는 경우가 많이 있으니 같이 알고 계시는게 좋아요.

#include <stdio.h>
#include <string.h>
#include <locale.h>
 
int main(void)
{
    setlocale(LC_COLLATE, "cs_CZ.iso88592");
 
    const char* s1 = "hrnec";
    const char* s2 = "chrt";
 
    printf("In the Czech locale: ");
    if(strcoll(s1, s2) < 0)
         printf("%s before %s\n", s1, s2);
    else
         printf("%s before %s\n", s2, s1);
 
    printf("In lexicographical comparison: ");
    if(strcmp(s1, s2) < 0)
         printf("%s before %s\n", s1, s2);
    else
         printf("%s before %s\n", s2, s1);
}

 

 

다른 string.h 파일의 함수에 대해 알고 싶으시다면 String.h 함수 파헤치기!!

 

C언어 라이브러리 - String.h 헤더 파일 분석하기(String.h 함수 모음, C언어 래퍼런스)

c언어를 사용하시거나 해보셨던 분들은 대부분 memcpy, memset 함수를 사용해보셨을 텐데요. 해당 함수를 사용하기 위해서는 String.h 파일을 포함시켜줬던 기억이 나실겁니다. 요렇게요 #include #include

idsn.tistory.com

반응형