프로그래밍/C,C++

[C]Split함수 구현

MAKGA 2016. 4. 20. 10:51
320x100

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
44
45
46
47
48
49
50
51
52
53
char **split( char *str, const char delim, int *count )
{
    if( str == NULL ) {
        return NULL;
    }
 
    char **result = NULL;
    char *tmp = str;
    char *end = str + strlen(str);
    char prev = '\0';
    int nCount = 0;
 
    if( str[0== delim ) {
        ++str;
    }
 
    if*(end-1== delim ) {
        *(end-1= '\0';    
    }
 
    while ( *tmp != NULL )
    {
        if ( *tmp == delim && prev != delim ) {
            ++*count;
        }
 
        prev = *tmp;
        ++tmp;
    }
 
    result = (char**)malloc(sizeof(char** *count+1);
    tmp = strtok( str, &delim );
    while( tmp != NULL )    
    {
        result[nCount] = (char*)malloc(strlen(tmp) * sizeof(char+ 1);
        result[nCount] = tmp;
        ++nCount;
        tmp = strtok(NULL, &delim);
    }
 
    return result;
}
 
 
char str[] = "\tabcdefg\t\thijklmn\topqrstu\tvwxyz";
int nCount = 0;
char **splitstr = split( str, '\t', &nCount );
if( splitstr != NULL )
{
    forint i=0; i<nCount; ++i ) {
        printf"%s\n", splitstr[i] );
    }
}
cs

기능 구현에 중점을 두어서 처리되지 않은 예외처리가 있을 수 있습니다.



320x100

'프로그래밍 > C,C++' 카테고리의 다른 글

람다(lambda)  (0) 2018.04.11
STL 알고리즘  (0) 2018.04.02
STL 컨테이너  (0) 2018.04.02
예외처리(exception)  (0) 2018.04.01
포인터 인자 검증하기  (0) 2016.07.20