문자열 연산함수(3) 문자열을 비교하는 strcmp, strncmp함수
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와 정확히 동일한 알고리즘 입니다.