본문 바로가기

UNIX_LINUX_C_C++

strsep C 소스

strsep C 소스

/* strtok는 구분자 사이에 내용이 없으면 그냥 지나감 */
/* strsep는 구분자 사이에 내용이 없으면 빈 문자열 반환 */

#include <stdio.h>
#include <string.h>

char *strsep(register char **stringp, register const char *delim);

int main()
{
char Buff[256];
char *from;
char *value;

memset(Buff, 0x00, sizeof(Buff));
memcpy(Buff, "a|b|c||e|", sizeof(Buff)-1);

from = Buff;

value = strsep(&from, "|");
printf("%s\n", value);
value = strsep(&from, "|");
printf("%s\n", value);
value = strsep(&from, "|");
printf("%s\n", value);
value = strsep(&from, "|");
printf("%s\n", value);
value = strsep(&from, "|");
printf("%s\n", value);

}

char *strsep(register char **stringp, register const char *delim)
{
register char *s;
register const char *spanp;
register int c, sc;
char *tok;

if ((s = *stringp) == NULL)
return (NULL);
for (tok = s;;) {
c = *s++;
spanp = delim;
do {
if ((sc = *spanp++) == c) {
if (c == 0)
s = NULL;
else
s[-1] = 0;
*stringp = s;
return (tok);
}
} while (sc != 0);
}
/* NOTREACHED */
}