[질문]
질문드립니다. ^^;
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;
}
그냥 온라인에서 생각나는대로 짜서.. 오류가 있을지도 모르겠네요.
아마 있을 것 같기는 한데.. 여하튼 그 부분은 해결해보세요..
반응형
'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 |
댓글