[완료] strtok에서 연속된 구분자 구별하기

litmisty의 이미지

char buf[128];
strcpy(buf,"1,2,,4,5");
char seps[] = ",";
char *tr;
 
tr = strtok(buf, seps);
while(tr != NULL) {
	printf("%s\n", tr);
	tr = strtok(NULL, seps);
}
return 0;

strtok을 사용해서 문자열을 자를 때 예제와 같이 구분자가 붙어있을 경우에

1
2
4
5

이런식으로 출력이 됩니다.

제가 원하는 출력은

1
2

4
5

인데요, 어떻게 하면 될런지요..

구분자가 연속 된 경우에는 무시하지 않고 값이 없다는 것을 처리하고 싶습니다.
답변 부탁드립니다.

litmisty의 이미지

const char *str = "source,desti,string1,,string3";
const char *delims = ",";
 
size_t start = 0;
 
while (str[start] != '\0') {
	size_t end = strcspn(str + start, delims);
	printf("%.*s\n", end, str + start);
	start += (str[start + end] != '\0') ? end + 1 : end;
}

이런 소스가 있네요.

desimu의 이미지

잘 참고가 되었네요. 자답으로라도 남겨주셔서 감사합니다~~