strcmp, strncmp 함수 구현하기

윤효준·2024년 7월 31일
0

42 Libft 복습

목록 보기
15/28

strcmp, strncmp 함수의 manual은 다음과 같다!

Synopsis

#include <string.h>

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

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

Description

  • strcmp, strncmp 함수는 NULL로 종료된 문자열 s1과 s2를 사전식으로 비교한다.

  • strncmp 함수는 최대 n문자까지 비교한다.

  • strncmp은 이진 데이터보다는 문자열 비교를 위한 함수로 '\0' 이후에 나오는 문자들은 비교하지 않는다.

Return Values

  • strcmp, strncmp 함수는 s1이 클 때, 동일할 때, s2가 클 때 각각 양수, 0, 음수를 반환한다.

  • 비교는 unsigned character로 진행된다. 그렇기에 '\200''\0'보다 크다.

여기서 '\200'은 8비트 아스키 코드 값 200을 나타내고 이 값은 십진수로 128이다.
아스키 코드 값의 범위는 0부터 127까지이기에 128은 확장 아스키 코드에 속하는 문자이다.

구현

int	ft_strcmp(const char *s1, const char *s2)
{
    /* 두 문자열이 같지 않을 떄 반복문 종료
    *  만약 같아서 들어왔는데 두 문자가 NULL이면 break로 반복문 탈출
    */
	while (*s1 == *s2)
	{
        if (*s1 == '\0' && *s2 == '\0')
            break ;
		s1++;
		s2++;
	}
	return ((unsigned char)(*s1) - (unsigned char)(*s2));
}

int	ft_strncmp(const char *s1, const char *s2, size_t n)
{
    while (n > 0 && *s1 == *s2)
    {
        if (*s1 == '\0' && *s2 == '\0')
        	return (0);
        s1++;
        s2++;
        n--;
    }
    if (n == 0)
        return (0);
    return ((unsigned char)(*s1) - (unsigned char)(*s2));
}
profile
작은 문제를 하나하나 해결하며, 누군가의 하루에 선물이 되는 코드를 작성해 갑니다.

0개의 댓글