본문 바로가기
프로그래밍언어/C 언어

[혼자 공부하는 C언어] 문자열을 비교하는 strcmp, strncmp 함수

by khsnote22 2022. 12. 10.

http://www.yes24.com/Product/Goods/74269921?pid=123487&cosemkid=go15604913615239458&gclid=Cj0KCQiA1sucBhDgARIsAFoytUsujMD02MobM5GyuK852_-fwTF0XwLkXgdVps2DA64S0yWFuH9qTk4aAik-EALw_wcB 

 

혼자 공부하는 C 언어 - YES24

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학

www.yes24.com


문자열을 비교할 때는 strcmp와 strncmp 함수를 사용합니다. 

 

이중 strcmp 함수부터 살펴보겠습니다. strcmp 함수는 두 문자열의 사전 순서를 판단하여 그 결과를 반환합니다. 사전 순서는 사전에 단어가 수록되는 알파벳 순서를 말하며, 함수의 사용법과 반환값은 다음과 같습니다.

strcmp(str1, str2);
// str1이 str2보다 사전에 나중에 나오면 1 반환
// str1이 str2보다 사전에 먼저 나오면 -1 반환
// str1과 str2가 같은 문자열이면 0 반환

 간단한 예제를 살펴보겠습니다.

//strcmp, strncmp 함수를 사용한 문자열 비교

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

int main(void)
{
	char str1[80] = "pear";
	char str2[80] = "peach";

	printf("사전에 나중에 나오는 과일 이름 : ");
	if (strcmp(str1, str2) > 0) // str1이 str2보다 크면(사전에 나중에 나오면)
		printf("%s\n", str1); // str1 출력
	else // str1이 str2보다 크지 않으면
		printf("%s\n", str2); // str2 출력
	
	return 0;
}

strcmp 함수가 어떻게 동작하는지 하나씩 살펴보겠습니다.

strcmp 함수는 두 문자열에서 우선 첫 문자의 아스키 코드 값을 비교합니다. 아스키 코드 값은 알파벳 순서에 따라 커지므로 아스키 코드 값이 크면 사전의 뒤에 나오는 문자열이 됩니다.

 

첫 문자가 같으면 다음 문자의 아스키 코드 값을 차례로 비교하여 판단합니다. 마지막 문자까지 같으면 같은 문자열입니다.

 

사전 순서를 판단한 결과를 반환값으로 알려줍니다. 두 문자열 중에서 사전의 뒤에 나오는 문자열을 출력합니다.

 

strncmp 함수는 strcmp 함수와 거의 같지만 비교할 문자 수를 세 번째 인수로 지정할 수 있습니다.

즉, pear와 peach의 앞에서부터 3개의 문자만 비교하는 경우 결과로 0을 반환합니다. 9~13행을 다음과 같이 수정해서 다시 컴파일하고 실행결과를 적어봅시다.

printf("앞에서 3개의 문자만 비교하면?\n");
if (strncmp(str1, str2, 3) == 0) // 앞에서 3개의 문자가 같으면 0반환
	printf("같다.\n"); // "같다" 출력
else // 그렇지 않다면
	printf("다르다.\n"); // "다르다" 출력

strcmp 함수의 반환값으로 사전 순서를 판단할 때는 반드시 대소문자를 일치시켜야 합니다.

숫자나 특수문자가 포함된 경우도 아스키 코드 값의 크기를 비교하여 반환값을 결정합니다. 한글은 2바이트로 구현하는데 첫 번째 바이트의 코드 값이 어떤 아스키 코드 값보다 크므로 아스크 문자로 구성된 단어보다 사전에서 뒤에 나오는 단어로 처리됩니다. 물론 한글 자체의 코드 값은 가다나순으로 커집니다.