C - <string.h> - strcmp strncmp, strstr 구현하기

skyju·2022년 2월 12일
0

C

목록 보기
4/5

int *strcmp(char *s1, char * s2)
s1문자열과 s2문자열을 비교한다.
주의 사항
확장된 ascii 값이 들어올 경우를 고려하여 unsinged char 변수를 선언하여 처리해 준다.
반환 값
두 문자열을 비교하다가 다른 지점을 만났을 때의 s1의 ascii 값에서 s2의 ascii 값을 뺀 정수 값을 반환한다.

int	reproduce_strcmp(char *s1, char *s2)
{
	int				i;
	unsigned char	temp_s1;
	unsigned char	temp_s2;

	i = 0;
	while (*(s1 + i) || *(s2 + i))
	{
		if (*(s1 + i) != *(s2 + i))
		{
			temp_s1 = *(s1 + i);
			temp_s2 = *(s2 + i);
			return (temp_s1 - temp_s2);
		}
		++i;
	}
	return (0);
}

int *strncmp(char *s1, char * s2, unsigned int n)
s1문자열과 s2문자열을 n개 만큼 비교한다.
주의 사항
확장된 ascii 값이 들어올 경우를 고려하여 unsinged char 변수를 선언하여 처리해 준다.
반환 값
두 문자열을 n개만큼 비교하다가 다른 지점을 만났을 때의 s1의 ascii 값에서 s2의 ascii 값을 뺀 정수 값을 반환한다.

int	reproduce_strncmp(char *s1, char *s2, unsigned int n)
{
	unsigned int	i;
	unsigned char	temp_s1;
	unsigned char	temp_s2;

	i = 0;
	while ((*(s1 + i) || *(s2 + i)) && i < n)
	{
		if (*(s1 + i) != *(s2 + i))
		{
			temp_s1 = *(s1 + i);
			temp_s2 = *(s2 + i);
			return (temp_s1 - temp_s2);
		}
		++i;
	}
	return (0);
}

char *strstr(char *haystack, char * niddle)*
haystack에 niddle이 있는 지 찾는다.
주의 사항
haystack의 문자열로 niddle을 만들 수 있는 지 확인하려면 어떻게 만들면 될지 고민해보면 좋은 문제다.
반환 값
(1) niddle이 빈 문자열이라면 그냥 haystack을 반환한다.
(2) niddle을 haystack 어디서도 찾지 못한다면 NULL을 반환한다.
(3) niddle을 haystack에서 찾았다면 찾은 첫 문자의 주소를 반환한다.

char	*reproduce_strstr(char *str, char *to_find)
{
	int		index;

	index = 0;
	if (*to_find == '\0')
		return (str);
	while (*str)
	{	
		index = 0;
		while (*(str + index) == *(to_find + index))
		{	
			++index;
			if (*(to_find + index) == '\0')
				return (str);
		}
		++str;
	}
	return (0);
}
profile
https://github.com/skyju

0개의 댓글