June 13, 2021

C Piscine C 02

Piscine C 02 ex00 (ft_strcpy)

Задание:

• Reproduce the behavior of the function strcpy (man strcpy). • Here’s how it should be prototyped :

char *ft_strcpy(char *dest, char *src);

• Воспроизведите поведение функции strcpy (man strcpy). • Вот как это должно быть объявлено:

char *ft_strcpy(char *dest, char *src);

Решение 1

char    *ft_strcpy(char *dest, char *src)
{
    int    i;

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

Решение 2

char    *ft_strcpy(char *dest, char *src)
{
    char *tmp;

    tmp = dest;
    while (*src)
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
    return (tmp);
}

Решение 3

char    *ft_strcpy(char *dest, char *src)
{
    char    *t;

    t = dest;
    while ((*t++ = *src++) != 0)
        ;
    return (dest);
}

Решение 4

char    *ft_strcpy(char *dest, char *src)
{
    int i;

    i = 0;
    while (src[i] != '\0')
    {
        dest[i] = src[i];
        i++;
    }
    dest[i] = '\0';
    return (dest);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex01 (ft_strcpy)

Задание:

• Reproduce the behavior of the function strncpy (man strncpy). • Here’s how it should be prototyped :

char *ft_strncpy(char *dest, char *src, unsigned int n);

• Воспроизвести поведение функции strncpy (man strncpy). • Вот как это должно быть объявлено:

char *ft_strncpy(char *dest, char *src, unsigned int n);

Решение 1

char    *ft_strncpy(char *dest, char *src, unsigned int n)
{
    unsigned int    i;
    int             size;

    size = 0;
    i = 0;
    while (i < n && src[i])
    {
        dest[i] = src[i];
        i++;
    }
    while (i < n)
    {
        dest[i] = '\0';
        i++;
    }
    return (dest);
}

Решение 2

char    *ft_strncpy(char *dest, char *src, unsigned int n)
{
    unsigned int i;

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

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex02 (ft_str_is_alpha)

Задание:

• Create a function that returns 1 if the string given as a parameter contains only alphabetical characters, and 0 if it contains any other character. • Here’s how it should be prototyped :

int ft_str_is_alpha(char *str);

• It should return 1 if str is empty.

• Создайте функцию, которая возвращает 1, если строка, заданная в качестве параметра, содержит только алфавитные символы, и 0, если она содержит еще и любой другой символ.

int ft_str_is_alpha(char *str);

• Функция должна возвращать 1, если str пуст(не содержит др символов).

Решение 1

int        iss_alpha(char c)
{
    if ((c >= 'a') && (c <= 'z'))
        return (1);
    if ((c >= 'A') && (c <= 'Z'))
        return (1);
    return (0);
}

int        ft_str_is_alpha(char *str)
{
    int    i;
    
    i = 0;
    while (str[i])
    {
        if (!(iss_alpha(str[i])))
            return (0);
        i++;
    }
    return (1);
}

Решение 2

int        iss_alpha(char c)
{
    return (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')));
}

int        ft_str_is_alpha(char *str)
{
    int    i;
    
    i = 0;
    while (str[i])
    {
        if (!(iss_alpha(str[i])))
            return (0);
        i++;
    }
    return (1);
}

Решение 3

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

    i = 0;
    while (str[i] != '\0')
    {
        c = str[i];
        if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')))
            return (0);
        i++;
    }
    return (1);
}

Решение 4

int        ft_str_is_alpha(char *str)
{
    int    i;
    int    b;

    b = 0;
    while (str[i] != '\0')
    {
        if ((str[i] >= 'a' && str[i] <= 'z') ||
            (str[i] >= 'A' && str[i] <= 'Z'))
            b = 1;
        else
            return (0);
        i++;
    }
    return (b);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex03 (ft_str_is_numeric)

Задание:

• Create a function that returns 1 if the string given as a parameter contains only digits, and 0 if it contains any other character. • Here’s how it should be prototyped :

int ft_str_is_numeric(char *str);

• It should return 1 if str is empty.

• Создайте функцию, которая возвращает 1, если строка, заданная в качестве параметра, содержит только цифры, и 0, если она содержит любой другой символ.

int ft_str_is_numeric(char *str);

• Функция должна возвращать 1, если str пуст(не содержит др символов).

Решение 1

int        iss_num(char c)
{
    return ((c >= '0') && (c <= '9'));
}

int        ft_str_is_numeric(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!(iss_num(str[i])))
            return (0);
        i++;
    }
    return (1);
}

Решение 2

int        iss_num(char c)
{
    if ((c >= '0') && (c <= '9'))
        return (1);
    return (0);
}

int        ft_str_is_numeric(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!(iss_num(str[i])))
            return (0);
        i++;
    }
    return (1);
}

Решение 3

int        ft_str_is_numeric(char *str)
{
    int    i;
    int    b;

    b = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= '0' && str[i] <= '9')
            b = 1;
        else
            return (0);
        i++;
    }
    return (b);
}

Решение 4

int        ft_str_is_numeric(char *str)
{
    int        i;

    i = 0;
    while (str[i] != '\0')
    {
        if (!(str[i] >= 48 && str[i] <= 57))
            return (0);
        i++;
    }
    return (1);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex04 (ft_str_is_lowercase)

Задание:

• Create a function that returns 1 if the string given as a parameter contains only lowercase alphabetical characters, and 0 if it contains any other character. • Here’s how it should be prototyped :

int ft_str_is_lowercase(char *str);

• It should return 1 if str is empty.

Создайте функцию, которая возвращает 1, если строка, заданная в качестве параметра, содержит только строчные буквенные символы, и 0, если она содержит любой другой символ

int ft_str_is_lowercase(char *str);

• Функция должна возвращать 1, если строка 'str' пуста (не содержит др символов).

Решение 1

int        ft_str_is_lowercase(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!((str[i] >= 'a') && (str[i] <= 'z')))
            return (0);
        i++;
    }
    return (1);
}

Решение 2

int        iss_lowercase(char c)
{
    if ((c >= 'a') && (c <= 'z'))
        return (1);
    return (0);
}

int        ft_str_is_lowercase(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!(iss_lowercase(str[i])))
            return (0);
        i++;
    }
    return (1);
}

Решение 3

int        ft_str_is_lowercase(char *str)
{
    int    i;
    int    b;

    b = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= 'a' && str[i] <= 'z')
            b = 1;
        else
            return (0);
        i++;
    }
    return (b);
}

Решение 4

int        ft_str_is_lowercase(char *str)
{
    int        i;

    i = 0;
    while (str[i] != '\0')
    {
        if (!(str[i] >= 97 && str[i] <= 122))
            return (0);
        i++;
    }
    return (1);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex05 (ft_str_is_uppercase)

Задание:

• Create a function that returns 1 if the string given as a parameter contains only uppercase alphabetical characters, and 0 if it contains any other character. • Here’s how it should be prototyped :

int ft_str_is_uppercase(char *str);

• It should return 1 if str is empty.

• Создайте функцию, которая возвращает 1, если строка, заданная в качестве параметра, содержит только заглавные буквенные символы, и 0, если она содержит любой другой символ.

int ft_str_is_uppercase(char *str);

• Функция должна возвращать 1, если str пуст(не содержит др символов).

Решение 1

int        ft_str_is_uppercase(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!((str[i] >= 'A') && (str[i] <= 'Z')))
            return (0);
        i++;
    }
    return (1);
}

Решение 2

int        iss_uppercase(char c)
{
    if ((c >= 'A') && (c <= 'Z'))
        return (1);
    return (0);
}

int    ft_str_is_uppercase(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!(iss_uppercase(str[i])))
            return (0);
        i++;
    }
    return (1);
}

Решение 3

int        ft_str_is_uppercase(char *str)
{
    int    i;
    int    b;

    b = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= 'A' && str[i] <= 'Z')
            b = 1;
        else
            return (0);
        i++;
    }
    return (b);
}

Решение 4

int        ft_str_is_uppercase(char *str)
{
    int        i;

    i = 0;
    while (str[i] != '\0')
    {
        if (!(str[i] >= 65 && str[i] <= 90))
            return (0);
        i++;
    }
    return (1);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex06 (ft_str_is_printable)

Задание:

• Create a function that returns 1 if the string given as a parameter contains only printable characters, and 0 if it contains any other character. • Here’s how it should be prototyped :

int ft_str_is_printable(char *str);

• It should return 1 if str is empty

• Создайте функцию, которая возвращает 1, если строка, заданная в качестве параметра, содержит только печатные символы, и 0, если она содержит любой другой символ.

int ft_str_is_printable(char *str);

• Функция должна возвращать 1, если строка str пуста(не содержит др символов).

Решение 1

int        ft_str_is_printable(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!((str[i] >= 32) && (str[i] <= 126)))
            return (0);
        i++;
    }
    return (1);
}

Решение 2

int        iss_printable(char c)
{
    return ((c >= 32) && (c <= 126));
}

int        ft_str_is_printable(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if (!(iss_printable(str[i])))
            return (0);
        i++;
    }
    return (1);
}

Решение 3

int        ft_str_is_printable(char *str)
{
    int    i;
    int    b;

    b = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= ' ' && str[i] <= '~')
            b = 1;
        else
            return (0);
        i++;
    }
    return (b);
}

Решение 4

int        ft_str_is_printable(char *str)
{
    int        i;

    i = 0;
    while (str[i] != '\0')
    {
        if (!(str[i] >= 32 && str[i] <= 126))
            return (0);
        i++;
    }
    return (1);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex07 (ft_strupcase)

Задание:

• Create a function that transforms every letter to uppercase. • Here’s how it should be prototyped :

char *ft_strupcase(char *str);

• It should return str

• Создать функцию, которая преобразует каждую букву каждого слова в верхний регистр. • Вот как это должно быть объявлено:

char *ft_strupcase(char *str);

•Функция должна вернуть строку.

Решение 1

char    *ft_strupcase(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if ((str[i] >= 'a') && (str[i] <= 'z'))
            str[i] = ((str[i] - 'a') + 'A');
        i++;
    }
    return (str);
}

Решение 2

char *ft_strupcase(char *str)
{
    int i;

    i = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= 'a' && str[i] <= 'z')
            str[i] = ((str[i] - 'a') + 'A');
        i++;
    }
    return (str);
}

Решение 3

char    *ft_strupcase(char *str)
{
    int i;

    i = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= 97 && str[i] <= 122)
            str[i] = str[i] - 32;
        i++;
    }
    return (str);
}

Решение 4

char    *ft_struppcase(char *str)
{
    char *p;

    p = str;
    while (*p)
    {
        if ((*p >= 'a') && (*p <= 'z'))
            *p = ((*p - 'a') + 'A');
        p++;
    }
    return (str);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex08 (ft_strupcase)

Задание:

• Create a function that transforms every letter to lowercase. • Here’s how it should be prototyped :

char *ft_strlowcase(char *str);

• It should return str.

• Создать функцию, которая преобразует каждую букву каждого слова в нижний регистр. • Вот как это должно быть объявлено:

char *ft_strlowcase(char *str);

• Функция должна вернуть строку.

Решение 1

char    *ft_strlowcase(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        if ((str[i] >= 'A') && (str[i] <= 'Z'))
            str[i] = str[i] + 32;
        i++;
    }
    return (str);
}

Решение 2

char *ft_strlowcase(char *str)
{
    int i;

    i = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= 'A' && str[i] <= 'Z')
            str[i] = str[i] - 'A' + 'a';
        i++;
    }
    return (str);
}

Решение 3

char    *ft_strlowcase(char *str)
{
    int i;

    i = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= 65 && str[i] <= 90)
            str[i] = str[i] + 32;
        i++;
    }
    return (str);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex09 (ft_strupcase)

Задание:

• Create a function that capitalizes the first letter of each word and transforms all other letters to lowercase. • A word is a string of alphanumeric characters. • Here’s how it should be prototyped :

char *ft_strcapitalize(char *str);

• It should return str. • For example:

salut, comment tu vas ? 42mots quarante-deux; cinquante+et+un

• Becomes:

Salut, Comment Tu Vas ? 42mots Quarante-Deux; Cinquante+Et+U

• Создайте функцию, которая делает первую букву каждого слова заглавной и преобразует все остальные буквы в строчные. • Слово - это строка буквенно-цифровых символов. • Вот как это должно быть объявлено:

char *ft_strcapitalize(char *str);

• Функция должна вернуть строку.

• Например это:

salut, comment tu vas ? 42mots quarante-deux; cinquante+et+un

• Становится этим:

Salut, Comment Tu Vas ? 42mots Quarante-Deux; Cinquante+Et+U

Решение 1

int        iss_alpha(char c)
{
    if ((c >= 'a') && (c <= 'z'))
        return (1);
    if ((c >= 'A') && (c <= 'Z'))
        return (1);
    if ((c >= '0') && (c <= '9'))
        return (1);
    return (0);
}

int        is_maj(char c)
{
    return ((c >= 'A') && (c <= 'Z'));
}

char    is_min(char c)
{
    return ((c >= 'a') && (c <= 'z'));
}

char    *ft_strcapitalize(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        while (str[i] && !iss_alpha(str[i]))
            i++;
        if (str[i] && is_min(str[i]))
            str[i] = ((str[i] - 'a') + 'A');
        i++;
        while (str[i] && iss_alpha(str[i]))
        {
            if (is_maj(str[i]))
                str[i] = ((str[i] - 'A') + 'a');
            i++;
        }
    }
    return (str);
}

Решение 2

int        iss_alpha(char c)
{
    if ((c >= 'a') && (c <= 'z'))
        return (1);
    if ((c >= 'A') && (c <= 'Z'))
        return (1);
    if ((c >= '0') && (c <= '9'))
        return (1);
    return (0);
}

char    *ft_strcapitalize(char *str)
{
    int    i;

    i = 0;
    while (str[i])
    {
        while (str[i] && !iss_alpha(str[i]))
            i++;
        if (str[i] && ((str[i] >= 'a') && (str[i] <= 'z')))
            str[i] = ((str[i] - 'a') + 'A');
        i++;
        while (str[i] && iss_alpha(str[i]))
        {
            if ((str[i] >= 'A') && (str[i] <= 'Z'))
                str[i] = ((str[i] - 'A') + 'a');
            i++;
        }
    }
    return (str);
}

Решение 3

int        iss_alpha(char c)
{
    if ((c >= 'a') && (c <= 'z'))
        return (1);
    if ((c >= 'A') && (c <= 'Z'))
        return (1);
    if ((c >= '0') && (c <= '9'))
        return (1);
    return (0);
}

int        is_maj(char c)
{
    return ((c >= 'A') && (c <= 'Z'));
}

char    is_min(char c)
{
    return ((c >= 'a') && (c <= 'z'));
}

char    *ft_strcapitalize(char *str)
{
    int    i;
    int    word_new;

    i = 0;
    word_new = 1;
    while (str[i])
    {
        if (is_min(str[i]) && (word_new == 1))
            str[i] = ((str[i] - 'a') + 'A');
        else if (is_maj(str[i]) && (word_new == 0))
            str[i] = ((str[i] - 'A') + 'a');
        if (iss_alpha(str[i]))
            word_new = 0;
        else
            word_new = 1;
        i++;
    }
    return (str);
}

Решение 4

char    *jp_strlowcase(char *str)
{
    int    i;

    i = 0;
    while (str[i] != '\0')
    {
        if (str[i] >= 'A' && str[i] <= 'Z')
            str[i] = ((str[i] - 'A') + 'a');
        i++;
    }
    return (str);
}

char    *ft_strcapitalize(char *str)
{
    int    i;

    i = 1;
    jp_strlowcase(str);
    if (str[0] >= 'a' && str[0] <= 'z')
        str[0] = ((str[0] - 'a') + 'A');
    while (str[i])
    {
        if ((str[i] >= ' ' && str[i] <= '/') ||
            (str[i] >= ':' && str[i] <= '@'))
            if (str[i + 1] >= 'a' && str[i + 1] <= 'z')
                str[i + 1] = ((str[i + 1] - 'a') + 'A');
        i++;
    }
    return (str);
}

Решение 5

char    *ft_strcapitalize(char *str)
{
    int        i;
    char    c;
    int        space;

    i = 0;
    while (str[i] != '\0')
    {
        space = 1;
        if (i == 0)
            c = ';';
        else
            c = str[i - 1];
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
            space = 0;
        if (c >= '0' && c <= '9')
            space = 0;
        if (space == 1 && str[i] >= 'a' && str[i] <= 'z')
            str[i] = str[i] - 32;
        if (space == 0 && str[i] >= 'A' && str[i] <= 'Z')
            str[i] = str[i] + 32;
        i++;
    }
    return (str);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out

Piscine C 02 ex10 (ft_strlcpy)

Задание:

• Reproduce the behavior of the function strlcpy (man strlcpy). • Here’s how it should be prototyped :

unsigned int ft_strlcpy(char *dest, char *src, unsigned int size);

• Воспроизведите поведение функции strlcpy (man strlcpy).• Вот как это должно быть объявлено:

unsigned int ft_strlcpy(char *dest, char *src, unsigned int size);

unsigned int    ft_strlcpy(char *dest, char *src, unsigned int size)
{
    unsigned int    i;

    i = 0;
    size -= 1;
    while (src[i] && (i < size))
    {
        dest[i] = src[i];
        i++;
    }
    dest[i] = '\0';
    return (i);
}

Объяснения + проверка int main

Команда для компиляции и одновременного запуска:

gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out