PROWAREtech
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
C/C++: strtok Procedure
Find token in ASCII c-string.
char * strtok ( char * string, const char * control )
{
unsigned char *str;
const unsigned char *ctrl = control;
unsigned char map[32];
int count;
static char *nextoken; // Not thread safe
// Clear control map
for (count = 0; count < 32; count++)
map[count] = 0;
// Set bits in delimiter table
do {
map[*ctrl >> 3] |= (1 << (*ctrl & 7));
} while (*ctrl++);
// Initialize str. If string is NULL, set str to the saved
// pointer (i.e., continue breaking tokens out of the string
// from the last strtok call)
if (string)
str = string;
else
str = nextoken;
// Find beginning of token (skip over leading delimiters). Note that
// there is no token iff this loop sets str to point to the terminal
// null (*str == '\0')
while ( (map[*str >> 3] & (1 << (*str & 7))) && *str )
str++;
string = str;
// Find the end of the token. If it is not the end of the string,
// put a null there.
for ( ; *str ; str++ )
{
if ( map[*str >> 3] & (1 << (*str & 7)) )
{
*str++ = '\0';
break;
}
}
// Update nextoken (or the corresponding field in the per-thread
// data structure
nextoken = str;
// Determine if a token has been found.
if ( string == str )
return NULL;
else
return string;
}
Comment![](/img/comment-white.svg)