Provides string tokenisation functions. Use this to split a string
into a list of words (delimited by spaces) so that each word can be
manipulated separately.
icl_shortstr_t
value; // Item value
Splits a string into a list of tokens delimited by whitespace. Returns a new
ipr_token_list item, which the caller must destroy.
String to parseReturned list
char
*word_start,
*word_end;
ipr_token_t
*token;
//
tokens = ipr_token_list_new ();
word_start = string;
while (*word_start) {
while (isspace (*word_start))
word_start++;
word_end = word_start;
while (*word_end && !isspace (*word_end))
word_end++;
if (word_end > word_start) {
token = ipr_token_new ();
icl_shortstr_ncpy (token->value, word_start, word_end - word_start);
ipr_token_list_queue (tokens, token);
ipr_token_unlink (&token);
}
word_start = word_end;
}
Splits a string into a list of tokens delimited by a set of user-specified
delimiters. Returns a new ipr_token_list item, which the caller must destroy.
String to parseDelimitersReturned list
char
*word_start,
*word_end;
ipr_token_t
*token;
//
tokens = ipr_token_list_new ();
word_start = string;
while (*word_start) {
while (strchr (delims, *word_start))
word_start++;
word_end = word_start;
while (*word_end && !strchr (delims, *word_end))
word_end++;
if (word_end > word_start) {
token = ipr_token_new ();
icl_shortstr_ncpy (token->value, word_start, word_end - word_start);
ipr_token_list_queue (tokens, token);
ipr_token_unlink (&token);
}
word_start = word_end;
}
ipr_token_list_t
*tokens;
//
tokens = ipr_token_split ("this is a word");
assert (ipr_token_list_count (tokens) == 4);
ipr_token_list_destroy (&tokens);
tokens = ipr_token_split (" this is a word ");
assert (ipr_token_list_count (tokens) == 4);
ipr_token_list_destroy (&tokens);
tokens = ipr_token_split (" ");
assert (ipr_token_list_count (tokens) == 0);
ipr_token_list_destroy (&tokens);
tokens = ipr_token_split (" this-is-a-word ");
assert (ipr_token_list_count (tokens) == 1);
ipr_token_list_destroy (&tokens);
tokens = ipr_token_split ("this-is-a-word");
assert (ipr_token_list_count (tokens) == 1);
ipr_token_list_destroy (&tokens);
tokens = ipr_token_split_rich ("this is a word", " ");
assert (ipr_token_list_count (tokens) == 4);
ipr_token_list_destroy (&tokens);
tokens = ipr_token_split_rich ("this is;a word", ";-");
assert (ipr_token_list_count (tokens) == 2);
ipr_token_list_destroy (&tokens);