PROWAREtech

articles » current » c-plus-plus » procedures » strtok

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;
}

PROWAREtech

Hello there! How can I help you today?
Ask any question

PROWAREtech

This site uses cookies. Cookies are simple text files stored on the user's computer. They are used for adding features and security to this site. Read the privacy policy.
ACCEPT REJECT