#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

int ft_strncpy(char* s1, char* s2, int n)
{
	int i;

	i = 0;
	while (i < n)
	{
		s1[i] = s2[i];
		i++;
	}
	s1[i] = '\0';
	return i;
}

int find_charset(char ch, char* charset)
{
	int i;
    int size;

	i = 0;
    size = 0;
    while (charset[size] != '\0')
        size++;
	while (i < size)
	{
		if (charset[i] == ch)
			return 1;
		i++;
	}
	return 0;
}

int size_charset(char* str, char* charset)
{
	int j;
	int word_p;
	int size;

	word_p = 1;
	size = 0;
	while (*str != '\0')
	{
		j = 0;
		if (!find_charset(*str, charset) && word_p)
		{
			word_p = 0;
			size++;
		}
		if (find_charset(*str, charset))
			word_p = 1;
		str++;
	}
	return size + 1;
}

char *input_arr(char* str, char* charset, char** arr, int i)
{
    int arr_size;

    arr_size = 0;
    while (1)
    {
        if (find_charset(*str, charset) || *str == '\0')
            break;
        arr_size++;
        str++;
    }
	arr[i] = (char*)malloc(sizeof(char) * arr_size);
    ft_strncpy(arr[i], str - arr_size, arr_size);
    return str;
}

char** ft_split(char* str, char* charset)
{
	char** arr;
	int i;

	i = 0;
	arr = (char**)malloc(sizeof(char*) * size_charset(str, charset));
	while (*str != '\0')
	{
		if (!find_charset(*str, charset))
		{
            str = input_arr(str, charset, arr, i);
            i++;
            if (*str == '\0')
                break;
		}
        str++;
	}
    arr[i] = (char*)malloc(1);
    arr[i] = '\0';
	return arr;
}

int	main(void)
{
    char str_arr[] = "eef";
    char charset_arr[] = "e";
    char** dest_arr;

    dest_arr = ft_split(str_arr, charset_arr);
    assert(strcmp(dest_arr[0], "f") == 0);
    assert(dest_arr[1] == 0);

    printf("문제 쪼개기: split 하여 생성할 문자열 배열의 크기를 구한다\n");
    printf("ft_split_arr_len 함수 테스트: 구분자 두개로 갑싸진 문자열을 인정한다\n");
    printf("문자열 맨 처음이 구분자가 아닌경우, 맨 끝이 구분자인 경우\n");

    char str_arr2[] = "avef,sfew.q21312,qwe221.qadxzcz,";
    char charset_arr2[] = ",. ";
    dest_arr = ft_split(str_arr2, charset_arr2);
    //assert(ft_split_arr_len(str_arr2, charset_arr2) == 5);
    assert(strcmp(dest_arr[0], "avef") == 0);
    assert(strcmp(dest_arr[1], "sfew") == 0);
    assert(strcmp(dest_arr[2], "q21312") == 0);
    assert(strcmp(dest_arr[3], "qwe221") == 0);
    assert(strcmp(dest_arr[4], "qadxzcz") == 0);
    assert(dest_arr[5] == 0);
    free(dest_arr);

    char str_arr3[] = "sfe.";
    char charset_arr3[] = ",. ";
    dest_arr = ft_split(str_arr3, charset_arr3);
    assert(strcmp(dest_arr[0], "sfe") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    char str_arr4[] = "eef";
    char charset_arr4[] = "f";
    dest_arr = ft_split(str_arr4, charset_arr4);
    assert(strcmp(dest_arr[0], "ee") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    char str_arr5[] = "eeeavef";
    char charset_arr5[] = "af";
    dest_arr = ft_split(str_arr5, charset_arr5);
    assert(strcmp(dest_arr[0], "eee") == 0);
    assert(strcmp(dest_arr[1], "ve") == 0);
    assert(dest_arr[2] == 0);
    free(dest_arr);

    printf("문자열이 맨 처음이 구분자, 맨 끝이 구분자인 경우\n");
    char str_arr6[] = "...avef,sfew.q21312,qwe221.qadxzcz,";
    char charset_arr6[] = ",. ";
    dest_arr = ft_split(str_arr6, charset_arr6);
    assert(strcmp(dest_arr[0], "avef") == 0);
    assert(strcmp(dest_arr[1], "sfew") == 0);
    assert(strcmp(dest_arr[2], "q21312") == 0);
    assert(strcmp(dest_arr[3], "qwe221") == 0);
    assert(strcmp(dest_arr[4], "qadxzcz") == 0);
    assert(dest_arr[5] == 0);
    free(dest_arr);

    char str_arr7[] = ".sfe,";
    char charset_arr7[] = ",. ";
    dest_arr = ft_split(str_arr7, charset_arr7);
    assert(strcmp(dest_arr[0], "sfe") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    char str_arr8[] = "avef";
    char charset_arr8[] = "af";
    dest_arr = ft_split(str_arr8, charset_arr8);
    assert(strcmp(dest_arr[0], "ve") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    printf("문자열이 맨 처음이 구분자, 맨 끝은 구분자가 아닌 경우\n");
    char str_arr9[] = "avef";
    char charset_arr9[] = "a";
    dest_arr = ft_split(str_arr9, charset_arr9);
    assert(strcmp(dest_arr[0], "vef") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    printf("문자열 맨 처음이 구분자가 아닌 경우, 맨 끝도 구분자가 아닌 경우\n");
    char str_arr10[] = "sfe";
    char charset_arr10[] = ",. ";
    dest_arr = ft_split(str_arr10, charset_arr10);
    assert(strcmp(dest_arr[0], "sfe") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    char str_arr11[] = "avef";
    char charset_arr11[] = ",. ";
    dest_arr = ft_split(str_arr11, charset_arr11);
    assert(strcmp(dest_arr[0], "avef") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    char str_arr12[] = "wekejrekj";
    char charset_arr12[] = "ek";
    dest_arr = ft_split(str_arr12, charset_arr12);
    assert(strcmp(dest_arr[0], "w") == 0);
    assert(strcmp(dest_arr[1], "jr") == 0);
    assert(strcmp(dest_arr[2], "j") == 0);
    assert(dest_arr[3] == 0);
    free(dest_arr);

    printf("문자열 모두가 구분자에 포함되는 경우: 길이가 0이다\n");
    printf("배열 안에는 빈문자열을 포함하지 않는다\n");
    char str_arr13[] = "....";
    char charset_arr13[] = ",. ";
    dest_arr = ft_split(str_arr13, charset_arr13);
    assert(dest_arr[0] == 0);
    free(dest_arr);

    printf("문자열 모두가 구분자에 하나도 포함되지 않는 경우: 길이가 1 그대로 출력\n");
    char str_arr14[] = "...avef,sfew.q21312,qwe221.qadxzcz,";
    char charset_arr14[] = "0";
    dest_arr = ft_split(str_arr14, charset_arr14);
    assert(strcmp(dest_arr[0], "...avef,sfew.q21312,qwe221.qadxzcz,") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    printf("문자열이 빈 문자열인 경우:길이가 0이다\n");
    char str_arr15[] = "";
    char charset_arr15[] = ",. ";
    dest_arr = ft_split(str_arr15, charset_arr15);
    assert(dest_arr[0] == 0);
    free(dest_arr);

    printf("구분자가 빈 문자열인 경우: 문자열 그대로 출력\n");
    char str_arr16[] = "...avef,sfew.q21312,qwe221.qadxzcz,";
    char charset_arr16[] = "";
    dest_arr = ft_split(str_arr16, charset_arr16);
    assert(strcmp(dest_arr[0], "...avef,sfew.q21312,qwe221.qadxzcz,") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    char str_arr17[] = "svwefklwejfwe";
    char charset_arr17[] = "";
    dest_arr = ft_split(str_arr17, charset_arr17);
    assert(strcmp(dest_arr[0], "svwefklwejfwe") == 0);
    assert(dest_arr[1] == 0);
    free(dest_arr);

    printf("%s", "all pass");
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: