개발지식/c c++

[c/c++] strcmp strncmp 문자열 비교 함수 예시와 차이

개발자료맥시멈 2024. 10. 17. 21:49
반응형

c/c++ 에는 문자열을 다루는 함수를 제공하는 기본 라이브러리가 있습니다.

 

문자열을 다루는 c/c++ 기본 라이브러리는 string.h 입니다.

 

가장 기본적인 문자열 함수로는 문자열 비교 함수가 있습니다.

 

 

 

strcmp

 

함수 원형:

int strcmp(const char *str1, const char *str2);

 

설명:

strcmp 함수는 두 매개변수로 입력받은 두 개의  문자열을 비교하고 그 결과를 반환합니다.

 

매개변수:

const char *str1 : 비교할 두 문자열 중 하나

const char *str2 : 비교할 두 문자열 중 하나

 

반환값:

음수, 0, 양수 중 하나를 반환합니다.

 

반환값은 특별한 프로세스에 의해 결정됩니다. 

 

strcmp 함수는 두 문자열의 문자를 첫 번째 문자에서부터 어느 한 문자열이 끝날 때 까지 비교합니다.

 

두 문자의 아스키 코드 정수 값을 비교하여 그 정수 값의 크기에 따라 음수와 양수를 반환합니다.

 

str1 < str2 인 경우에는 음수를 반환합니다.

 

str1 > str2 인 경우에는 양수를 반환합니다.

 

모든 문자가 똑같은 경우, 즉 두 문자열이 동일하다면 0을 반환합니다.

 

특징:

아스키 코드는 알파벳 대문자와 소문자에 각기 다른 값이 매겨져 있습니다.

 

이로 인해 같은 문자라 하더라도 대문자와 소문자는 다른 문자로 처리합니다.

 

strcmp 함수는 다음 두 문자열 devdesk Devdesk 를 같지 않다고 판단합니다.

 

예제:

 

devdesk devDesk 두 문자열은 다르며 반환값으로 양수 1을 얻습니다.

 

문자열 devdesk 이 문자열 devDesk 보다 크다는 의미입니다.

 

두 문자열의 세 번째 문자인 dev까지는 동일합니다.

 

다음 문자인 d 와 D 를 비교 시 d의 아스키 코드 정수 값이 더 큽니다.

 

D의 아스키코드 정수 값은 68 이고 d의 아스키코드 정수 값은 100 입니다.

 

devdesk devdesk 같은 두 문자열은 같으며 반환값으로 0을 얻습니다.

 

 

두 문자열의 길이가 다른 경우는 두 문자열이 다르다고 판단합니다.

 

더 긴 문자열이 긴 쪽으로 판단하는 반환값을 반환합니다.

 

devdesktest가 devdesk보다 길다는 의미로 0이 반환됩니다.

 

 

strncmp

 

함수 원형:

int strncmp(const char *str1, const char *str2, size_t n);

 

설명:

strcmp 함수는 두 매개변수로 입력받은 두 개의  문자열을 지시된 번째 문자까지 비교하고 그 결과를 반환합니다.

 

매개변수:

const char *str1 : 비교할 두 문자열 중 하나

const char *str2 : 비교할 두 문자열 중 하나

size_t n : 비교하려는 길이

 

반환값:

기본적으로는 strcmp와 같습니다.

 

다만, strncmp는 세 번째 매개변수로 입력받은 길이 만큼 비교하고 함수를 종료합니다.

 

특징:

strncmp 함수는 세 번째 매개변수 n에 입력받은 길이만큼 두 문자열을 비교합니다.

 

strncmp(devdesk, devdisc, 3); 처럼 문자열 비교 함수를 호출하면, 세 번째 문자까지만 비교하므로 반환값은 동일하다는 뜻의 0이 반환됩니다.

 

size_t 자료형은 unsigned int 자료형과 동일합니다.

 

예제:

 

strncmp함수는 세 번째 매개변수로 넘기는 길이만큼만 비교를 합니다.

 

첫 번째 예시는 세 번째 매개변수로 3을 입력합니다.

 

devdesk devDesk 의 세 번째 문자까지는 동일하므로 반환값은 동일하다는 뜻의 0을 얻습니다.

 

두 번째 예시는 세 번째 매개변수로 100을 입력합니다.

 

100번 째 문자까지 비교하기 전에 문자열이 종료됩니다.

 

즉, 어느 한 쪽의 문자열이 끝날 때까지 비교하고 종료하므로, strcmp 와 동일하게 동작합니다.

 

 

끝까지 읽어주셔서 감사합니다.

즐거운 프로그래밍 되세요!

 

 

 

 

 

 

반응형