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 ) { for( int 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 |