strtok.c

来自「一组基础的C库的实现」· C语言 代码 · 共 100 行

C
100
字号
/* $Id: strtok.c 262 2006-11-16 07:34:57Z solar $ *//* Release $Name$ *//* strtok( char *, const char * )   This file is part of the Public Domain C Library (PDCLib).   Permission is granted to use, modify, and / or redistribute at will.*/#include <string.h>#ifndef REGTESTchar * strtok( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 ){    static char * tmp = NULL;    const char * p = s2;    if ( s1 != NULL )    {        /* new string */        tmp = s1;    }    else    {        /* old string continued */        if ( tmp == NULL )        {            /* No old string, no new string, nothing to do */            return NULL;        }        s1 = tmp;    }    /* skipping leading s2 characters */    while ( *p && *s1 )    {        if ( *s1 == *p )        {            /* found seperator; skip and start over */            ++s1;            p = s2;            continue;        }        ++p;    }    if ( ! *s1 )    {        /* no more to parse */        return ( tmp = NULL );    }    /* skipping non-s2 characters */    tmp = s1;    while ( *tmp )    {        p = s2;        while ( *p )        {            if ( *tmp == *p++ )            {                /* found seperator; overwrite with '\0', position tmp, return */                *tmp++ = '\0';                return s1;            }        }        ++tmp;    }    /* parsed to end of string */    return ( tmp = NULL );}#endif#ifdef TEST#include <_PDCLIB_test.h>int main(){    char s[] = "_a_bc__d_";    BEGIN_TESTS;    TESTCASE( strtok( s, "_" ) == &s[1] );    TESTCASE( s[1] == 'a' );    TESTCASE( s[2] == '\0' );    TESTCASE( strtok( NULL, "_" ) == &s[3] );    TESTCASE( s[3] == 'b' );    TESTCASE( s[4] == 'c' );    TESTCASE( s[5] == '\0' );    TESTCASE( strtok( NULL, "_" ) == &s[7] );    TESTCASE( s[6] == '_' );    TESTCASE( s[7] == 'd' );    TESTCASE( s[8] == '\0' );    TESTCASE( strtok( NULL, "_" ) == NULL );    return TEST_RESULTS;}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?