일상 메모장

strcmp 사용법 및 구현 - C 문자열 처리 본문

C 언어

strcmp 사용법 및 구현 - C 문자열 처리

핸드오버 2020. 1. 11. 10:18

설명

두개의 문자열을 비교하는 함수입니다.

사용법

#include <string.h>

char *strcmp(const char *s1, const char *s2);

#include <string.h>

char *strncmp(const char *s1, const char *s2, size_t n);

정의

strcmp 함수는 s1과 s2 두 문자열을 비교합니다. 결과값이 0보다 크면 s1 이 s2보다 크고, 0보다 작으면 s2가 s1보다 큰것을 의미하고, 두 문자열이 같으면 0을 리턴합니다.

strncmp 함수도 비슷한데 n bytes 만큼만 s1과 s2를 비교합니다.

반환 값

strcmp()와 strncmp() 함수는 위에서 언급했듯이 두 문자열이 같으면 0을 리턴합니다.

s1이 s2보다 크면 양수을 리턴하고, s2가 s1보다 크면 음수를 리턴합니다.

 

strcmp 내부 구현 (strcmp 실제 구현부)

/**
 * strcmp - Compare two strings
 * @s1: One string
 * @s2: Another string
 */
int strcmp(const char *s1, const char s2)
{
	unsigned char c1, c2;

	while (1) {
    	/* s1, s2 문자열에서 순서대로 한글자씩 가져옵니다. */
		c1 = *s1++;
		c2 = *s2++;
		/* 한글자씩 비교하고 다르면 -1 또는 1 리턴합니다. */
		if (c1 != c2)
			return c1 < c2 ? -1 : 1;
		if (!c1)
			break;
	}
    /* 루프를 빠져나오면 두 문자열이 같다는 의미이므로 0을 리턴합니다. */
	return 0;
}

unsigned char c1 과 c2 에 각각 s1의 첫번째 문자와 s2의 첫번째 문자를 대입합니다. 그럼 c1 = 't', c2 = 't' 입니다.

다음 루프는 c1 = 'e' c2 = 'e' 비교하고 계속해서 다음 문자를 비교해 나갑니다. 계속 문자가 같으면 널문자에 의해서 루프를 빠져나오고 0을 리턴합니다.

예제

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

int main()
{
	char s1[] = "test";
	char s2[] = "test";
	int ret;

	/* s1 문자열 "test" 와 s2 문자열 "test"를 비교합니다. */
	ret = strstr(s1, s2);

	/*
	 * s1, s2 두 문자열은 같으므로 ret 값은 0 입니다.
	 */
	printf("%d\n", ret);

	return 0;
}

결과값은 s1, s2 문자열이 같으므로 0 이 출력됩니다.