如何将strtok与每个单个非alpha字符一起用作分隔符?(C)

the*_*ode 0 c file

所以我有一个字符串:

**BOB**123(*&**blah**02938*(*&91820**FOO**
Run Code Online (Sandbox Code Playgroud)

我希望能够用来strtok消除每个单词.分隔符是每个不是字母的单个字符.

我被建议给我们isalpha,但不知道我会怎么做.有没有办法在不指定每个非字母字符的情况下执行此操作?

不幸的是,不允许使用正则表达式库.

BLU*_*IXY 5

#include <stdio.h>
#include <ctype.h>

char *strtok_t(char *str, int (*test)(int ch)){
    static char *store = NULL;
    char *token;
    if(str != NULL){
        store = str;
    }
    if(store == NULL) return NULL;
    while(*store && !test(*store)){//skip delimiter
        ++store;
    }
    if(*store == '\0') return NULL;
    token=store;
    while(*store && test(*store)){
        ++store;
    }

    if(*store == '\0'){
        store = NULL;
    } else {
        *store++ = '\0';
    }
    return token;
}

int main(void){
    char str[128] = "BOB123(&blah02938(*&91820FOO";
    char *token;
    for(token = strtok_t(str, isalpha); token ; token = strtok_t(NULL, isalpha)){
        printf("%s\n", token);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)