Загрузка...

Split и Substr в C

Тема в разделе C/C++ создана пользователем kolibri777 23 мар 2022. 162 просмотра

  1. kolibri777
    kolibri777 Автор темы 23 мар 2022 Продаю бананы, людей. Шучу не бананы 275 25 фев 2019
    может быть кому то будет полезно

    C
    # include <stdlib.h>
    # include <unistd.h>

    size_t ft_strlen(const char *str)
    {
    size_t len;

    len = 0;
    while (str[len])
    len++;
    return (len);
    }

    char *ft_substr(char const *s, unsigned int start, size_t len)
    {
    char *ptr;
    size_t index;
    size_t slen;

    index = 0;
    if (!s)
    return (NULL);
    if (ft_strlen(s) < start)
    {
    ptr = malloc(sizeof(char));
    ptr[0] = '\0';
    return (ptr);
    }
    slen = ft_strlen(s + start);
    if (slen < len)
    len = slen;
    ptr = (char *)malloc(len);
    if (!ptr)
    return (0);
    while (index < len)
    ptr[index++] = s[start++];
    ptr[index] = '\0';
    return (ptr);
    }


    static size_t ft_msize(char const *s, char c)
    {
    size_t i;

    i = 0;
    while (*s)
    {
    i++;
    while (*s && *s == c)
    s++;
    if (*s == '\0')
    i--;
    while (*s && *s != c)
    s++;
    }
    return (i);
    }

    static void ft_free(char **str)
    {
    size_t i;

    i = 0;
    while (str[i++])
    free(str[i]);
    free(str);
    }

    static char **ft_writter(char **split, char const *s, char c)
    {
    size_t len;
    size_t i;

    i = 0;
    while (*s)
    {
    if (*s != c)
    {
    len = 0;
    while (*s && *s != c)
    {
    len++;
    s++;
    }
    split[i] = ft_substr(s - len, 0, len);
    if (!split[i++])
    ft_free(split);
    }
    else
    s++;
    }
    split[i] = 0;
    return (split);
    }

    char **ft_split(char const *s, char c)
    {
    char **split;
    size_t msize;

    if (!s)
    return (NULL);
    msize = ft_msize(s, c);
    split = malloc(sizeof(char *) * (msize + 1));
    if (!split)
    return (NULL);
    split = ft_writter(split, s, c);
    return (split);
    }
    ну вообщем то так. буду постепенно добавить функции в моч библиотеку. вот ссылку, если что нибудь будет надо, держите :)
     
    23 мар 2022 Изменено
  2. vtlstolyarov
    vtlstolyarov 24 мар 2022 468 8 янв 2022
    Новерно ты так задумывал (я надеюсь), но я бы ожидал что
    ft_split("abba", 'b')
    и
    ft_split("aba", 'b')
    будут возвращать разный результат.
     
Top
Загрузка...