POST

C언어 문자열 비교하기(strcmp, strncmp)

C언어 문자열 비교하기

 

C언어에 문자열을 비교해주는 기본 라이브러리 함수가 존재하는데 strcmp와 strncmp가 그것이다.


보통 문자열을 비교하고자 할때 아래와 같은 실수를 많이 한다.

int main(void) {

char str1[] = "My String";

char str2[] = "My String";

if (str1 == str2)

puts("Equal");

else

puts("Not equal");


return 0;

}

이 코드를 언듯보면 문자열을 비교하는것 같다. 하지만 절대로 Equal이 출력될 수 없다.

그 이유는 저 코드는 문자열을 비교하는것이 아니라 배열str1과 str2의 주소값을 비교하기 때문이다.

그래서 문자열의 내용을 비교하는 함수를 별도로 호출하여야한다.


strcmp, strncmp


strcmp와 strncmp는 아래와 같은 결과를 반환한다.

ex)strcmp(str1,str2);  strncmp(str1,str2,3);


str1이 더 크면 0보다 큰 값 반환(양수)

str2가 더 크면 0보다 작은 값 반환(음수)

내용이 같으면 0 반환


여기서 strncmp에서 세번째로 전달되는 인자의 수 만큼 앞에서 시작하여 그 수만큼 부분적으로 비교한다.

그리고 문자의 크고 작음은 아스키 코드의 값을 기준으로 한다.


아래의 코드 작성 실행하여 보자.


#include<stdio.h>

#include<string.h>

#pragma warning(disable:4996) // scanf 보안 경고 제거용


int main(void) {

char str1[20];

char str2[20];

printf("문자열 입력 1: ");

scanf("%s", str1);

printf("문자열 입력 2: ");

scanf("%s", str2);

if (!strcmp(str1, str2)) {

puts("두 문자열은 완벽히 동일합니다.");

}

else {

puts("두 문자열은 일치하지 하지않습니다.");

if (!strncmp(str1, str2, 3))

puts("그러나 앞 세글자는 동일 합니다.");

}

return 0;

}


이 코드에서 조건식을 보도록하자.

if (!strcmp(str1, str2)), if (!strncmp(str1, str2, 3)) 조건식을 이렇게 써준 이유는 위에서 설명한것 처럼 문자열이 일치할 때 0을 반환 하도록 되어있다.

그런데 0은 거짓을 의미한다 그래서 if에서 거짓이라 판단하고 else로 넘어 가기때문에 !(not)연산을 하여 거짓을 참으로 바꾼다.




아스키코드표 - 바로가기

연산자 - 바로가기