strtok的实现——用于按给定符号分割字符串的函数

来源:互联网 发布:php显示图片缩略图 编辑:程序博客网 时间:2024/06/05 10:24
char *mystrtok(char *s,const char *delim) 
{
    static char *last;
    char *tok;
    char *ucdelim;
    char *spanp;
    int c,sc;


    /**//*s为空,并且上次剩余值也为空,则直接返回NULL,否则s为last或当前值中有值的一方*/
    if (s == NULL && (s = last) == NULL)
        return NULL;
  
    
    int found = 0;//是否找到与delim匹配的字符
    
    //处理连续的待匹配的字符
    cont:
    c=*s++;
    for (spanp = (char *)delim;(sc = *spanp++) != 0;)
    {
        if (c == sc)
            goto cont;
    }
    if (c == 0) 
    {
        last = NULL;
        return NULL;
    }


    tok = s-1;
    while (!found && *s != '\0') 
    {
        ucdelim = (char *) delim;
        while (*ucdelim) 
        {
            if (*s == *ucdelim) 
            {
                found = 1;
                *s = '\0';
                last = s + 1;
                break;
            }
            ucdelim++;
        }
        if (!found)
        {
            s++;
            if(*s=='\0')
                last = NULL;
        }
    }


    return tok;

}


int main(void)
{
char *ptr;
char buffer[] = {"12121321 dasdasdas-dsadasd"};
char *delims = "- ";


ptr = mystrtok(buffer, delims);
printf("%d\n", strlen(ptr));
while(ptr != NULL)
{
printf("%s\n", ptr);
ptr = mystrtok(NULL, delims);
}

printf("%s\n", buffer);


exit(0);
}

0 0
原创粉丝点击