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

C 언어 strcoll() 함수란? 문자열 비교 사용법과 예제 총정리


C 표준 라이브러리 함수인 int strcoll(const char *str1, const char *str2)은 문자열 str1str2를 비교하는 함수입니다. 특징적인 점은 비교 결과가 현재 로케일(locale)의 LC_COLLATE 설정에 따라 달라진다는 것입니다.

여러 개의 문자(character)가 모여 이루어진 배열을 문자열(string)이라고 부릅니다.

문자열의 선언

문자열 배열은 다음과 같은 형식으로 선언합니다.

char stringname [size];

예를 들어 char string[50];은 최대 50자를 저장할 수 있는 문자열입니다.

문자열의 초기화

  • 단일 문자 상수를 사용하는 방법
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
  • 문자열 상수를 사용하는 방법
char string[10] = "Hello";

접근(Accessing) - 제어 문자열 %s를 사용하면 널 문자('\0')를 만날 때까지 문자열 내용에 접근할 수 있습니다.

strcoll() 함수란?

strcoll() 함수는 strcmp() 함수처럼 두 문자열을 비교하고 그 결과에 따라 정수 값을 반환합니다. 다만 strcmp()가 단순히 문자의 바이트 값을 비교하는 반면, strcoll()은 현재 로케일의 LC_COLLATE 범주에 정의된 정렬 규칙에 따라 문자열을 해석하여 비교한다는 차이가 있습니다.

함수 선언

strcoll() 함수는 string.h 헤더 파일에 다음과 같이 선언되어 있습니다.

int strcoll(const char *string1, const char *string2);

각 매개변수의 의미는 다음과 같습니다.

  • string1: 비교 대상인 첫 번째 문자열
  • string2: 비교 대상인 두 번째 문자열

반환 값

  • 0보다 큰 값(> 0): string1에서 처음으로 일치하지 않는 문자의 값이 string2의 해당 문자보다 클 때
  • 0보다 작은 값(< 0): string1에서 처음으로 일치하지 않는 문자의 값이 string2의 해당 문자보다 작을 때
  • 0(= 0): 두 문자열이 완전히 같을 때

예제 1: 기본 사용법

다음 예제는 strcoll() 함수의 기본적인 사용법을 보여줍니다.

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

int main () {
   char string1[20];
   char string2[20];
   int final;

   strcpy(string1, "WELCOME");
   strcpy(string2, "Welcome to the world!");

   final = strcoll(string1, string2);

   if(final > 0){
      printf("string1 is greater than string2");
   } else if(final < 0) {
      printf("string1 is less than string2");
   } else {
      printf("string1 and string2 are equal");
   }
   return 0;
}

실행 결과

위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.

string1 is less than string2

"WELCOME"과 "Welcome to the world!"를 비교하면 세 번째 문자에서 대문자 'E'(ASCII 69)가 소문자 'e'(ASCII 101)보다 작기 때문에 string1이 더 작다고 판단됩니다.

예제 2: 실행 시간에 입력받은 문자열 비교하기

이번에는 프로그램 실행 중에 사용자로부터 두 문자열을 입력받아 strcoll()로 비교하는 예제를 살펴보겠습니다.

#include <stdio.h>

int main (){
   char string1[20];
   char string2[20];
   int final;

   printf("enter string1:\n");
   gets(string1);

   printf("enter string2:\n");
   gets(string2);

   final = strcoll(string1, string2);

   if(final > 0){
      printf("string1 is greater than string2");
   }
   else if(final < 0){
      printf("string1 is less than string2");
   }
   else{
      printf("string1 and string2 are equal");
   }
   return 0;
}

실행 결과

위 프로그램을 실행하고 문자열을 입력하면 다음과 같은 결과가 출력됩니다.

enter string1:
Tutorials Point
enter string2:
Point
string1 is greater than string2

첫 번째 문자부터 비교했을 때 'T'(ASCII 84)가 'P'(ASCII 80)보다 크기 때문에 string1이 더 크다고 판단됩니다.

참고: 예제에 사용된 gets() 함수는 버퍼 오버플로우 위험 때문에 C11 표준에서 제거되었습니다. 실제 개발 환경에서는 fgets()처럼 안전성이 검증된 함수를 사용하는 것이 좋습니다.