목차

string.h functions

🗓️

문자열과 관련된 함수

  • 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)
  • s1s2가 지시하는 문자열들을 비교한다.
  • 모든 쌍들이 일치한다면 두 문자열은 같은 것이다.
  • 그렇지 않으면 처음으로 일치하지 않는 쌍이 나타날 때까지 비교한다.
  • 문자 코드값을 사용하여 문자들을 비교한다.
  • 문자열들이 같으면 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)
  • s1s2가 가리키는 문자열의 처음 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);
}