strcmp() 함수란?
strcmp() 함수는 C 언어 표준 라이브러리에 포함된 내장 함수로, "string.h" 헤더 파일에 선언되어 있습니다. 이 함수는 두 개의 문자열 인자를 비교하는 데 사용되며, 사전순(lexicographical order)으로 비교를 수행합니다. 즉, 두 문자열을 문자 단위로 하나씩 비교하며, 첫 번째 문자부터 시작해 두 문자가 서로 다르거나 NULL 문자('\0')를 만날 때까지 비교를 계속 진행합니다.
두 문자열의 첫 번째 문자가 같다면 함수는 두 번째 문자를 검사하고, 그래도 같으면 세 번째 문자를 검사하는 방식으로 진행됩니다. 이 과정은 NULL 문자를 발견하거나 서로 다른 문자를 만날 때까지 반복됩니다.
strcmp() 함수의 문법
int strcmp(const char *leftStr, const char *rightStr);
strcmp() 함수는 비교 결과에 따라 다음 세 가지 값 중 하나를 반환합니다.
1. 0 반환 — 두 문자열이 동일한 경우
두 문자열이 완전히 동일하면 0을 반환합니다. 이는 두 문자열의 모든 문자가 같다는 의미입니다.
다음은 C 언어에서 두 문자열이 같을 때 strcmp() 함수를 사용한 예제입니다.
예제
#include<stdio.h>
#include<string.h>
int main() {
char str1[] = "Tom!";
char str2[] = "Tom!";
int result = strcmp(str1, str2);
if (result==0)
printf("Strings are equal");
else
printf("Strings are unequal");
printf("\nValue returned by strcmp() is: %d", result);
return 0;
}출력 결과
Strings are equal Value returned by strcmp() is: 0
2. 0보다 큰 값(>0) 반환
왼쪽 문자열에서 일치하는 위치의 문자가 오른쪽 문자열의 해당 문자보다 더 큰 ASCII 값을 가질 때 0보다 큰 값을 반환합니다.
다음은 strcmp() 함수가 0보다 큰 값을 반환하는 경우의 예제입니다.
예제
#include<stdio.h>
#include<string.h>
int main() {
char str1[] = "hello World!";
char str2[] = "Hello World!";
int result = strcmp(str1, str2);
if (result==0)
printf("Strings are equal");
else
printf("Strings are unequal");
printf("\nValue returned by strcmp() is: %d", result);
return 0;
}출력 결과
Strings are unequal Value returned by strcmp() is: 32
위 예제에서 소문자 'h'(ASCII 값 104)가 대문자 'H'(ASCII 값 72)보다 32만큼 크기 때문에 32가 반환됩니다.
3. 0보다 작은 값(<0) 반환
왼쪽 문자열에서 일치하는 위치의 문자가 오른쪽 문자열의 해당 문자보다 더 작은 ASCII 값을 가질 때 0보다 작은 값을 반환합니다.
다음은 strcmp() 함수가 음수를 반환하는 경우의 예제입니다.
예제
#include<stdio.h>
#include<string.h>
int main() {
char leftStr[] = "Hello World!";
char rightStr[] = "hello World!";
int result = strcmp(leftStr, rightStr);
if (result==0)
printf("Strings are equal");
else
printf("Strings are unequal");
printf("\nValue returned by strcmp() is: %d", result);
return 0;
}출력 결과
Strings are unequal Value returned by strcmp() is: -32
핵심 정리
strcmp() 함수는 대소문자를 구분하며, ASCII 값을 기준으로 문자열을 비교한다는 점을 기억해야 합니다. 대문자와 소문자의 ASCII 값 차이는 32이므로, 위 예제에서 ±32라는 반환값이 나오는 것입니다. 또한 두 문자열이 같은지 확인할 때는 반환값이 정확히 0인지 검사하는 것이 올바른 방법입니다.