문자열과 관련된 함수
- 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);
}