#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");
}
To embed this program on your website, copy the following code and paste it into your website's HTML: