반응형
[질문]
질문드립니다. ^^;
char lhlParsingData[100][256];
char StrTmp = "ABC|||DEF";
토근 구분자 "|" 하나를 사용합니다.
strtok 함수를 사용해서 lhlParsingData[arry] 에 저장하려고 합니다.
제가 원하는건..
lhlParsingData[0] = "ABC"
lhlParsingData[1] = ""
lhlParsingData[2] = ""
lhlParsingData[3] = "DEF"
값을 원하는뎅... 로그를 찍어보면..
lhlParsingData[0] = "ABC"
lhlParsingData[1] = "DEF"
제가 원하는 값으로 쪼갤수 없나여 ? (기타 다른 함수를 사용 해서라도..???)
[답]
strtok(...)으로는 어렵습니다. 그 이유는, strtok(...)은 여러개의 분리자가 겹쳐있는 경우, 그것을 그냥 다 스킵해요. 그래서 새로 만드셔야 하는데요. strtok(...)과 같은 인터페이스로 만들 수도 있지만... char **split(...); 형태로 만들께요. 이 함수의 문제점은 모두 배열을 할당받기 때문에.. 좀 문제가 있습니다.
예를 들어서 char **split(const char *str, char delimeter) 란 함수를 이용해서 문자열 배열을 받는 방법을 설명드리면요.
#include <stdio.h> #include <string.h> char **split(const char *str, char delimeter); void main() { char **p; char **t; char *s = "ABC||DEF"; p = split(s, '|'); for( t = p ; *t ; t++ ) printf("[%s]\n", *t); }
형태로 만드시면 되요..
char **split(const char *str, char delimeter) { char **p; int count = 0; char *t; int b, c; for( t = str ; *t ; t++ ) if( *t == delemeter ) count++; p = (char **)malloc(sizeof(char *)*(count+2)); for( t = str, count = 0, c = 0, b = 0 ; ; t++, c++ ) { if( *t == delemeter || *t == 0 ) { p[count] = (char *)malloc(c+1); memcpy(p[count], str+b, c); p[count][c] = 0; count++; b += c+1; c = -1; if( *t == 0 ) break; } } return p; }
그냥 온라인에서 생각나는대로 짜서.. 오류가 있을지도 모르겠네요.
아마 있을 것 같기는 한데.. 여하튼 그 부분은 해결해보세요..
728x90
'Programming > C++' 카테고리의 다른 글
초성 표시하기 (0) | 2014.12.26 |
---|---|
마크로를 이용해서 문자열 찍기 (0) | 2014.12.02 |
C++로 문자열 입력받아서 출력 변환하기.. (2) | 2014.09.24 |
로또 번호 생성 및 짝맞추기 (0) | 2014.05.05 |
C/C++ 에서 변수 선언자의 위치에 따른 차이 (0) | 2014.03.11 |
댓글