Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ strcoll() 함수 완벽 가이드: 로케일 기반 문자열 비교

strcoll() 함수란?

C 언어의 strcoll() 함수는 시스템의 로케일(locale) 설정에 따른 정렬 순서(collating sequence)를 기준으로 두 개의 문자열을 비교하는 함수입니다. 일반적인 strcmp()가 문자의 바이트 값을 단순 비교하는 것과 달리, strcoll()은 각 언어·지역 환경에서 정의된 문자 정렬 규칙을 적용한다는 점이 특징입니다.

반환값

strcoll() 함수는 비교 결과에 따라 다음과 같은 정수 값을 반환합니다.

  • 0 — 두 문자열이 동일한 경우
  • 0보다 큰 값 — 첫 번째 문자열이 두 번째 문자열보다 큰 경우
  • 0보다 작은 값 — 첫 번째 문자열이 두 번째 문자열보다 작은 경우

함수 문법

int strcoll(const char *first_string, const char *second_string);

strcoll()<string.h> 헤더 파일에 선언되어 있으며, 매개변수는 다음과 같습니다.

  • first_string: 비교할 첫 번째 문자열의 포인터
  • second_string: 비교할 두 번째 문자열의 포인터

예제

다음은 strcoll() 함수를 사용해 두 문자열을 비교하는 C 언어 예제입니다.

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

int main() {
    const char s1[] = "Helloworld";
    const char s2[] = "Blank";
    int result;

    result = strcoll(s1, s2);

    if (result > 0)
        printf("문자열 s1이 s2보다 큽니다");
    else if (result < 0)
        printf("문자열 s1이 s2보다 작습니다");
    else
        printf("두 문자열이 같습니다");

    return 0;
}

실행 결과

문자열 s1이 s2보다 큽니다

"Helloworld"와 "Blank"를 비교하면 첫 글자 'H'가 'B'보다 사전순으로 뒤에 있고 ASCII 값도 더 크기 때문에, 첫 번째 문자열이 더 크다는 결과가 출력됩니다.

strcmp()와 strcoll()의 차이점

두 함수 모두 문자열을 비교하지만 다음과 같은 차이가 있습니다.

  • strcmp(): 문자의 바이트 값(ASCII 코드 등)을 기준으로 단순 비교합니다.
  • strcoll(): 현재 로케일의 LC_COLLATE 설정에 따라 문자를 해석하고 비교합니다. 따라서 악센트가 있는 유럽 언어 등에서는 사전식 순서에 더 부합하는 결과를 얻을 수 있습니다.

다만 로케일 기반 비교는 바이트 단위 비교보다 처리 비용이 클 수 있습니다. 동일한 문자열 집합을 반복적으로 정렬해야 하는 경우에는 strxfrm()으로 문자열을 미리 변환한 뒤 strcmp()로 비교하는 방식이 성능 면에서 더 유리합니다.