728x90
[이전 글]
[다음 글]
Part1 : Libc functions
아래의 함수들을 다시 구현하세요. 이 함수들은 외부 함수를 필요로 하지 않습니다 :
- isalpha, isdigit, isalnum, isascii, isprint
- bzero, memset, memcpy, memmove, memchr, memcmp
- strlen, strnstr, strlcpy, strlcat, strchr, strrchr, strncmp
- toupper, tolower, atoi
다음의 함수들은 외부 함수 malloc을 사용하여 구현하세요 :
- calloc, strdup
ft_strlen
size_t strlen(const char *str)
{
size_t i;
i = 0;
while (str[i])
i++;
return (i);
}
- 문자열의 길이를 구하는 함수이다.
- 문자열의 시작부터 널 문자 직전가지의 문자의 개수를 구한다.
ft_strnstr
char *ft_strnstr(const char *haystack, const char *needle, size_t len)
{
size_t i;
size_t j;
if (!needle[0])
return ((char *)haystack);
i = 0;
while (haystack[i] && i < len)
{
j = 0;
while (i + j < len && haystack[i + j] == needle[j])
{
j++;
if (!needle[j])
return ((char *)(haystack + i));
}
i++;
}
return (0);
}
- 문자열 내에서 부분 문자열을 탐색하는 함수이다.
- haystack 문자열의 시작부터 len까지 needle문자열이 포함되어 있는지 확인한다.
- 포함되어 있을 경우, haystack문자열에서 needle문자열이 시작한 부분의 위치 주소를 반환한다.
- needle 문자열의 값이 비어있으면 haystack의 주소 첫 번째 값을 반환한다.
- needle 문자열을 찾지 못하면 null 값을 반환한다.
ft_strlcpy
size_t ft_strlcpy(char *dst, const char *src, size_t dstsize)
{
size_t i;
size_t len_src;
len_src = ft_strlen(src);
if (!dstsize)
return (len_src);
i = 0;
while (i + 1 < dstsize && src[i])
{
dst[i] = src[i];
i++;
}
dst[i] = 0;
return (len_src);
}
- null을 보장하면서 문자열을 복사하는 함수이다.
- src의 길이를 반환한다.
반응형
ft_strlcat
size_t ft_strlcat(char *dest, const char *src, size_t dstsize)
{
size_t i;
size_t len_des;
size_t len_src;
len_des = ft_strlen(dest);
len_src = ft_strlen(src);
i = 0;
while (src[i] && len_des + i + 1 < dstsize)
{
dest[len_des + i] = src[i];
i++;
}
if (len_des > dstsize)
return (dstsize + len_src);
dest[len_des + i] = 0;
return (len_des + len_src);
}
- null을 보장하여 문자열을 이어 붙이는 함수이다.
- size - 1만큼 dst 뒤에 src를 이어 붙이며 size의 크기에 따라 반환하는 값이 나뉜다.
- size > dst : len_dst + len_src 길이를 반환한다.
- size < dst : size + len_src 길이를 반환한다.
ft_strchr
char *ft_strchr(const char *s, int c)
{
int i;
i = -1;
while (s[++i])
if (s[i] == c)
return ((char *)s + i);
if (!c)
return ((char *)s + i);
return (0);
}
- 문자열에서 특정 문자로 검색하는 함수이다.
- 해당 문자로 시작하는 문자열의 주소의 값을 반환하고, 없으면 null을 반환한다.
- 이때, null문자도 비교 가능하도록 예외처리를 해준다.
ft_strrchr
char *ft_strrchr(const char *s, int c)
{
int i;
i = ft_strlen(s);
while (i >= 0)
{
if (s[i] == (char)c)
return ((char *)&s[i]);
i--;
}
return (0);
}
- 문자열에서 특정 문자를 검색하여 가장 마지막으로 나타난 위치를 검색하는 함수이다.
- 해당 문자로 끝나는 문자열의 주소의 값을 반환하고, 없으면 null을 반환한다.
- 이때, null문자도 비교 가능하도록 예외 처리해준다.
ft_strncmp
int ft_strncmp(const char *s1, const char *s2, size_t n)
{
size_t i;
i = 0;
while (i < n)
{
if ((s1[i] != s2[i]) || !s1[i] || !s2[i])
return ((unsigned char)s1[i] - (unsigned char)s2[i]);
i++;
}
return (0);
}
- 두 문자열의 내용을 비교하는 함수입니다.
- 비교는 처음부터 n바이트까지 혹은 일치하지 않거나 null문자를 만났을 때까지만 비교한다.
- 모두 일치한다면 0을 반환한다.
- 최초로 일치하지 않는 문자가 발생할 경우,
- s1 > s2 : 양수 값을 반환한다.
- s1 < s2 : 음수 값을 반환한다.
- strcmp와 같은 방식이나 다른 문자가 나타나거나 null을 만나면 종료하고 값을 반환하는 차이점이 있다.
- 값을 반환할 때, 128 이상의 아스키코드 수를 계산할 경우를 위해 unsigned char형으로 변환했다.
728x90
반응형
'42 SEOUL > 0_Libft' 카테고리의 다른 글
[Libft] Bonus part (0) | 2022.03.28 |
---|---|
[Libft] Part2 : Additional functions (0) | 2022.03.28 |
[Libft] Part1 : toupper, tolower, atoi (0) | 2022.03.26 |
[Libft] Part1 : bzero, memset, memcpy, memmove, memchr, memcmp (0) | 2022.03.25 |
[Libft] Part1 : isalpha, isdigit, isalnum, isascii, isprint (0) | 2022.03.25 |
댓글