strtok的一种实现

C语言是一种高效的语言。它允许程序员写出跟系统库一样高效的代码。会自己写标准库中大部分库函数是C程序员的基本功。

这里介绍一个strtok代码的实现。偶尔不想使用系统时,可以试试这个代码。它没有调用别的函数。

char *str_tok(char *s, char *delims, char **save)
{
    
    
        int ra;
        char *p;
        char *q;
        char *t;

        if (*s=='\0') return NULL;
        ra=1;
        q =s;
        goto check;
label_a1:
        if (*p) {
    
    
                q++;
                if (*q) goto check;
                return NULL;
        }
        t = q;
        ++q;
        ++ra;

check:
        p = delims;
        while(*p && *q != *p) p++;
        if (ra==1) goto label_a1;

        if (*p) {
    
    
                *q++ = '\0';
                *save =q;
        }
        else {
    
    
                q++;
                if (*q) goto check;
                else *save =q;
        }
        return t;
}

下面是测试程序:

int main()
{
    
    
        char s[100];
        char *p, *sa;

        printf("> ");
        while(gets(s)) {
    
    
                sa = s;
                while((p=str_tok(sa, "\t ", &sa))) {
    
    
                        printf("[%s]\n", p);
                }
        printf("> ");
        }
        return 0;
}

おすすめ

転載: blog.csdn.net/aaasssdddd96/article/details/108228274
おすすめ