Загрузка...

Split and Substr in C

Thread in C/C++ created by kolibri777 Mar 23, 2022. 163 views

  1. kolibri777
    kolibri777 Topic starter Mar 23, 2022 Продаю бананы, людей. Шучу не бананы 275 Feb 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);
    }
    ну вообщем то так. буду постепенно добавить функции в моч библиотеку. вот ссылку, если что нибудь будет надо, держите :)
     
  2. vtlstolyarov
    Новерно ты так задумывал (я надеюсь), но я бы ожидал что
    ft_split("abba", 'b')
    и
    ft_split("aba", 'b')
    будут возвращать разный результат.
     
Top
Loading...