열렬히.뛰기

c03

école 42 > C > c03

ex00

c
int	ft_strcmp(char *s1, char *s2)
{
	while (*s1 != '\0' || *s2 != '\0')
	{
		if ((unsigned char) *s1 != (unsigned char) *s2)
			return (*(unsigned char *)s1 - *(unsigned char *)s2);
		s1++;
		s2++;
	}
	return (0);
}

ex01

c
int	ft_strncmp(char *s1, char *s2, unsigned int n)
{
	unsigned int	i;

	i = 0;
	while (i < n && (s1[i] != '\0' || s2[i] != '\0'))
	{
		if ((unsigned char) s1[i] != (unsigned char) s2[i])
			return ((unsigned char)s1[i] - (unsigned char)s2[i]);
		i++;
	}
	return (0);
}

ex02

c
int	findlength(char *arr)
{
	int	i;

	i = 0;
	while (arr[i] != '\0')
		i++;
	return (i);
}

char	*ft_strcat(char *dest, char *src)
{
	int	i;
	int	a;
	int	b;

	i = 0;
	a = findlength(src);
	b = findlength(dest);
	while (i < a)
	{
		dest[i + b] = src[i];
		i++;
	}
	dest[a + b] = '\0';
	return (dest);
}

ex03

c
unsigned int	findlength(char *arr)
{
	int	i;

	i = 0;
	while (*arr != '\0')
	{
		arr++;
		i++;
	}
	return (i);
}

char	*ft_strncat(char *dest, char *src, unsigned int nb)
{
	unsigned int		a;
	unsigned int		b;
	unsigned long long	i;

	a = findlength(src);
	b = findlength(dest);
	i = 0;
	while (i < nb && src[i] != '\0')
	{
		dest[i + b] = src[i];
		i++;
	}
	dest[b + i] = '\0';
	return (dest);
}

ex04

c
int	find_length(char *str)
{
	int	i;

	i = 0;
	while (str[i] != '\0')
		i++;
	return (i);
}

char	*ft_strstr(char *str, char *to_find)
{
	int	i;
	int	j;

	if (*to_find == '\0')
		return (str);
	i = 0;
	while (str[i] != '\0')
	{
		j = 0;
		if (str[i] == to_find[j])
		{
			while (j < find_length(to_find))
			{
				if (str[i + j] == to_find[j])
					j++;
				else
					break ;
			}
			if (to_find[j] == '\0')
				return (&str[i]);
		}
		i++;
	}
	return (0);
}

ex05

c
unsigned int	find_length(char *arr)
{
	int	i;

	i = 0;
	while (arr[i] != '\0')
		i++;
	return (i);
}

unsigned int	ft_strlcat(char *dest, char *src, unsigned int size)
{
	unsigned int	dest_len;
	unsigned int	src_len;                
	unsigned int	x;
	unsigned int	n;

	dest_len = find_length(dest);
	src_len = find_length(src);
	x = dest_len;
	n = 0;
	while (src[n] && (x + 1) < size)
	{
		dest[x] = src[n];
		n++;
		x++;
	}
	dest[x] = '\0';
	if (dest_len < size)
		return (src_len + dest_len);
	else
		return (src_len + size);
}

Size = dest 길이 + 붙일 데이터의 길이 + NULL

Size가 dest보다 작다면? (size < dest)

  • dest는 아무 역할도 하지 않음. 반환값: src의 길이 + size만 반환
  • dest가 뭔가 맞지 않음을 확인할 수 있음.