C 표준 라이브러리 함수인 int strcoll(const char *str1, const char *str2)은 문자열 str1과 str2를 비교하는 함수입니다. 특징적인 점은 비교 결과가 현재 로케일(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()처럼 안전성이 검증된 함수를 사용하는 것이 좋습니다.