/** * Skip the ``n'' next tokens. */ void strtok_skip(strtok_t *s, const char *delim, size_t n) { size_t i; strtok_check(s); for (i = 0; i < n; i++) { if (NULL == strtok_next(s, delim)) break; } }
int strtok_count(StringTokenizer* token){ if(!token) return 0; if( token->count != -1 ) return token->count; token->count = 0; while( strtok_has_more(token ) ) { token->nextToken[-1] = (*token->delim); strtok_next(token); ++token->count; } strtok_rewind(token); return token->count; }
/** * Tokenizer unit tests. */ void G_COLD strtok_test(void) { const char *string = "a; b, c ; d/e"; strtok_t *st; const char *tk; size_t len; st = strtok_make_nostrip(string); g_assert('\0' == strtok_delim(st)); g_assert(!strtok_eos(st)); tk = strtok_next(st, ",;"); g_assert(0 == strcmp(tk, "a")); g_assert(';' == strtok_delim(st)); g_assert(&string[2] == strtok_ptr(st)); tk = strtok_next(st, ","); g_assert(0 == strcmp(tk, " b")); g_assert(',' == strtok_delim(st)); tk = strtok_next_length(st, ";", &len); g_assert(0 == strcmp(tk, " c ")); g_assert(3 == len); g_assert(';' == strtok_delim(st)); tk = strtok_next_extended(st, "/", TRUE, TRUE); g_assert(0 == strcmp(tk, "d")); g_assert(!strtok_eos(st)); g_assert('/' == strtok_delim(st)); tk = strtok_next(st, "!"); g_assert(0 == strcmp(tk, "e")); g_assert(strtok_eos(st)); g_assert('\0' == strtok_delim(st)); tk = strtok_next(st, "!"); g_assert(NULL == tk); g_assert(strtok_eos(st)); strtok_restart(st); tk = strtok_next_extended(st, "!", TRUE, TRUE); g_assert(0 == strcmp(tk, string)); g_assert(strtok_eos(st)); strtok_free_null(&st); g_assert(strtok_has(string, ";,/", "d")); g_assert(strtok_has(string, ";", "b, c")); g_assert(!strtok_has(string, ";,/", "de")); g_assert(!strtok_case_has(string, ";,/", "de")); string = "with space #1 ; with space #2 ;"; g_assert(strtok_has(string, ";", "with space #2")); g_assert(!strtok_has(string, ";", "with space #2")); g_assert(!strtok_has(string, ";", "absent")); string = "word"; g_assert(strtok_has(string, ";", "word")); g_assert(strtok_has(string, ",;/", "word")); g_assert(strtok_case_has(string, ";", "WoRD")); }