문자열과 관련된 함수
- C의 string과 관련된 함수들 몇 가지를 정리 해봤다.
- 위는 string.h 함수의 원형이고 아래는 간단히 구현해본 코드다.
strcat
char *strcat(char * restrict s1, char * restrict s2)
s2
가 가리키는 문자열의 복사본을 (NULL
문자까지 포함하여) s1
이 가리키는 위치에 붙인다.s2
문자열의 첫번째 문자가 s1
문자열의 NULL
문자를 덮어 쓴다.s1
을 리턴한다
char *ft_strcat(char *dest, char *src)
{
char *tmp_dest;
tmp_dest = dest;
while(*tmp_dest)
tmp_dest++;
while(*src)
{
*tmp_dest = *src;
tmp_dest++;
src++;
}
*tmp_dest = '\0';
return (dest);
}
strncat
char *strncat(char * restrict s1, char * restrict s2, size_t n)
s2
가 가리키는 문자열에서 n
개의 문자들의 복사본을, 또는 NULL
문자까지 복사본을 s1
이 가리키는 위치에 붙인다.s2
의 문자열 첫번째 문자가 s1
문자열의 NULL
문자를 덮어 쓴다.NULL
문자가 항상 추가된다.s1
을 리턴한다.
char *ft_strncat(char *dest, char *src, unsigned int nb)
{
char *tmp_dest;
tmp_dest = dest;
while(*tmp_dest)
tmp_dest++;
while(*src && nb > 0)
{
*tmp_dest = *src;
tmp_dest++;
src++;
nb--;
}
*tmp_dest = '\0';
return (dest);
}
strcpy
char *strcpy(char * restrict s1, char * restrict s2)
s2
가 가리키는 문자열을 (NULL
문자까지 포함하여) s1
이 가리키는 위치에 복사한다.s1
을 리턴한다.
char *ft_strcpy(char *dest, char *src)
{
char *tmp_dest;
tmp_dest = dest;
while (*src)
{
*tmp_dest = *src;
tmp_dest++;
src++;
}
*tmp_dest = '\0';
return (dest);
}
strncpy
char *strncpy(char * restrict s1, char * restrict s2, size_t n)
s2
가 가리키는 문자열에서 n
개의 문자들의 복사본을, 또는 NULL
문자까지의 복사본을 s1
이 가리키는 위치에 복사한다.n
개의 문자들을 복사하기 전에 s2
에서 NULL
문자가 나타난다면, NULL
문자들을 덧붙여 전체를 n
개로 만든다.NULL
문자가 복사되기 전에 n
개의 문자들이 모두 복사된다면, NULL
문자를 붙이지 않는다.s1
을 리턴한다.
char *ft_strncpy(char *dest, char *src, unsigned int n)
{
unsigned int i;
i = 0;
while (src[i] && (i < n))
{
dest[i] = src[i];
i++;
}
while (i < n)
{
dest[i] = '\0';
i++;
}
return (dest);
}
strcmp
int strcmp(const char *s1, const char *s2)
s1
과 s2
가 지시하는 문자열들을 비교한다.- 모든 쌍들이 일치한다면 두 문자열은 같은 것이다.
- 그렇지 않으면 처음으로 일치하지 않는 쌍이 나타날 때까지 비교한다.
- 문자 코드값을 사용하여 문자들을 비교한다.
- 문자열들이 같으면
0
을 리턴한다. - 첫번째 문자열이 두번째 문자열보다 작으면 0보다 작은 값을 리턴한다 (음수)
- 첫번째 문자열이 두번째 문자열보다 크면 0보다 큰 값을 리턴한다 (양수)
int ft_strcmp(char *s1, char *s2)
{
while (*s1 && *s1 == *s2)
{
s1++;
s2++;
}
return (unsigned char) *s1 - (unsigned char) *s2;
}
strncmp
int strncmp(const char *s1, const char *s2, size_t n)
s1
과 s2
가 가리키는 문자열의 처음 n개의 문자들까지, 또는 처음 NULL
문자까지 비교한다.- 모든 쌍들이 일치한다면, 두 문자열은 같은 것이다.
- 그렇지 않으면 처음으로 일치하지 않는 쌍이 나타날 때 까지 비교한다.
- 문자 코드값을 사용하여 문자들을 비교한다.
- 문자열들이 같으면
0
을 리턴한다. - 첫번째 문자열이 두번째 문자열보다 작으면 0보다 작은 값을 리턴한다 (음수)
- 첫번째 문자열이 두번째 문자열보다 크면 0보다 큰 값을 리턴한다 (양수)
int ft_strncmp(char *s1, char *s2, unsigned int n)
{
while (*s1 && (*s1 == *s2) && n > 0)
{
s1++;
s2++;
n--;
}
if (n == 0)
return (0);
return *(unsigned char*)s1 - *(unsigned char*)s2;
}
strstr
char *strstr(const char *s1, const char *s2)
s2
에 있는 (종결 NULL
문자를 제외한) 문자들의 시퀀스가 s1
에서 처음 나타나는 위치를 가리키는 포인터를 리턴한다.- 일치하는 것을 발견하지 못하면
NULL
을 리턴한다.
int ft_char_compare(char *src, char *to_find)
{
while (*src && *to_find)
{
if (*src != *to_find)
return (0);
++src;
++to_find;
}
return (*to_find == '\0');
}
char *ft_strstr(char *src, char *to_find)
{
if (*to_find == '\0')
return (src);
while (*src != '\0')
{
if ((*src == *to_find) && ft_char_compare(src, to_find))
return (src);
++src;
}
return (0);
}
strlen
int strlen(const char *s)
- 문자열
s
에 들어있는 (종결 NULL
문자를 제외한) 문자들의 수를 리턴한다.
int ft_strlen(char *str)
{
int i;
i = 0;
while(str[i] != '\0')
{
i++;
}
return (i);
}