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() 함수 파헤치기(문자열을 비교, 같은 문자열 찾기)
Θ 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 언어 > C 언어 리이브러리 함수' 카테고리의 다른 글
[C언어] String.h 라이브러리 함수 - strxfrm() 함수 파헤치기(문자열 복사, 문자열 길이 구하기) (0) | 2021.04.01 |
---|---|
[C언어] String.h 라이브러리 함수 - strcnmp() 함수 파헤치기(문자열 비교, 같은 문자열 찾기) (0) | 2021.03.25 |
[C언어] String.h 라이브러리 함수 - strcmp() 함수 파헤치기(문자열을 비교, 같은 문자열 찾기) (0) | 2021.02.14 |
[C언어] String.h 라이브러리 함수 - memcmp() 함수 파헤치기(문자열을 비교해보자, 같은 문자열 찾기) (0) | 2021.02.09 |
[C언어] String.h 라이브러리 함수 - strncat() 함수 파헤치기 (0) | 2021.01.31 |