포인터랑 친해지기 위해서 파이썬에 기본적으로 있는 기능인 length와 split를 만들어 보고자 하였다. 다만 length의 경우 sizeof를 이용하면 간단하게 구현할 수 있었다. 물론 length 함수를 만드려고 하면 더 복잡해 진다. 그리고 예상외로 버그도 많았다. 그래서 결국은 split만 완성할 수 있었다…


Source Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#pragma once
#include <stdio.h>
#include <stdlib.h>

char** Jsplit(char* tmp, char ch)
{
    int count = 0;
    int ch_count = 0;
    int length = 0;
    int max_length = 0;
    while(1) {
        length++;
        if(*(tmp + count) == ch) {
            ch_count++;
            if(max_length < length) {
                max_length = length;
                length = 0;
            }
        }
        count++;
		if(*(tmp + count) == NULL) {
			break;
		}
	}
    ch_count++;
    int index = 0;
    char **return_array = (char**)malloc(sizeof(char) * ch_count);
    for(int i=0; i<ch_count; i++) {
        return_array[i] = (char*) malloc(sizeof(char) * max_length);
        for(int j=0; j<max_length; j++) {
            return_array[i][j] = *(tmp + index);
            index++;
            if(*(tmp + index) == ch) {
                index++;
                break;
            }
            else if(*(tmp + index) == NULL) {
                break;
            }
        }
    }
    return return_array;
}


How To Use?

1
2
3
4
5
char x[] = "ASD,FG,ASD";
char **y = Jsplit(x,',');
printf("%s\n",y[0]);
printf("%s\n",y[1]);
printf("%s\n",y[2]);
1
2
3
ASD
FG
ASD

sizeof를 이용하여 배열의 길이를 구하면 for문으로 사용하기 편리하겠다.

WRITTEN BY

배진오

하고싶은 건 다 하면서 사는게 목표
im@baejino.com

comments powered by Disqus