首页 > 其他 > 详细

c strtok函数代码实现

时间:2021-04-13 10:12:28      阅读:18      评论:0      收藏:0      [点我收藏+]
char * Mystrtok(char * string, const char * control)
{
    unsigned char *str;
    const unsigned char *ctrl = (const unsigned char *)control;

    //注意这里使用了static类型,实际的strtok函数出于线程安全会使用TLS 
    static unsigned char* _TOKEN = NULL;


    static unsigned char map[32];     //赋初值
    int count;

    /* Clear control map */
    for (count = 0; count < 32; count++)
        map[count] = 0;

    /* Set bits in delimiter table */  //map为static变量,那么这个分隔符表只需要赋值一次即可
    if (NULL != string)
    {
        do {
            map[*ctrl >> 3] |= (1 << (*ctrl & 7));
        } while (*ctrl++);
    }

    /* Initialize str */

    /* If string is NULL, set str to the saved
     * pointer (i.e., continue breaking tokens out of the string
     * from the last strtok call)
     */
    if (string)
        str = (unsigned char *)string;
    else
        str = (unsigned char *)_TOKEN;

    /* Find beginning of token (skip over leading delimiters). Note that
     * there is no token iff this loop sets str to point to the terminal
     * null (*str == ‘\0‘)
     */
    while ((map[*str >> 3] & (1 << (*str & 7))) && *str)
        str++;

    string = (char*)str;

    /* Find the end of the token. If it is not the end of the string,
     * put a null there. */
    for (; *str; str++)
        if (map[*str >> 3] & (1 << (*str & 7))) {
            *str++ = \0;
            break;
        }

    /* Update nextoken (or the corresponding field in the per-thread data
     * structure */
    _TOKEN = str;

    /* Determine if a token has been found. */
    if (string == (char*)str)
        return NULL;
    else
        return string;
}

标准库

c strtok函数代码实现

原文:https://www.cnblogs.com/feizianquan/p/14651439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!