C언어 자습/혼자공부하는 C언어 (저자 서현우)

문자열 연산함수(3) 문자열을 비교하는 strcmp, strncmp함수

막뇌 2023. 4. 21. 14:08
strcmp(문자열1, 문자열2)

간단한 사용법과 강력한 효율을 가진 함수입니다.

입력값을 검사하는 과정에서 많이 활용할 수 있을것 같습니다.

문자열1과 문자열2를 비교한 뒤에 정수를 반환합니다. 맞습니다. 반환값이 int 자료형인 함수입니다.

 

완전히 같으면 0을 반환하는데

다를 경우 1 또는 -1이 반환되게 됩니다. 이는 문자열1과 문자열2를 비교해서 결정하는데요.

가나다순, 그러니까 영어로는 abc 순이겠네요. 알파벳 오름차순, 보통 학교 출석번호를 정할 때 오름차순으로 많이 정하죠?

출석번호순서대로 줄을 세운다고 칩시다. 이때

문자열1이 앞에있으면 -1이 반환되고 (먼저간다)

문자열2가 앞에 있으면 1이 반환됩니다. (나중에 간다)

이게 가능한 이유는 아스키코드가 a~z까지 오름차순으로 정렬되어있기 때문 아닐까 싶네요.

 

예제로 살펴 보겠습니다.

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

int main()
{
	char str1[80] = "pear";
	char str2[80] = "peach";
	printf("사전에 나중에 나오는 과일 이름: ");
	if (strcmp(str1, str2) > 0)
		printf("%s\n", str1);
	else
		printf("%s\n", str2);

	return 0;
}

(strcmp(str1, str2) > 0)

이 문장을 살펴 보겠습니다.

pear

peach

비교할 때 pea까지는 같죠?

r과 c에서 차이가 나는데 

r보다는 c가 출석번호가 더 빠르겠지요.

문자열1보다 문자열2가 앞에 있는 형태 이니까 1이 반환 될겁니다.

 

그러면 저 if문과 else문 중에 if문에 해당되겠죠?

그래서 str1인 pear 가 출력 되는 형태인거죠.

 

strncmp함수는 기존의 strcpy, strcat 에서 strncpy, strncat 이 되면서 매개변수가 하나 늘어났던 것과 동일합니다.

정수 형태의 매개변수를 하나 더 받게 되는데 그건 글자수를 뜻합니다.

 

(strncmp(str1, str2, 3)  이렇게 표현 하면 3글자 까지 비교하겠다는 의미인겁니다.

반환값이 0이냐, 1이냐, -1 이냐는 기존 strcmp와 정확히 동일한 알고리즘 입니다.