The strtok() function in C++ returns the next token in a C-string (null terminated byte string).
"Tokens" are smaller chunks of the string that are separated by a specified character, called the delimiting character.
This function is defined in the cstring header file.
Example
#include <cstring>
#include <iostream>
using namespace std;
int main() {
  char quote[] = "Remember me when you look at the moon!";
  // break the string when it encounters empty space
  char* word = strtok(quote, " ");
  cout <<  word;
  return 0;
}
// Output: Remember
strtok() Syntax
The syntax of strtok() is:
strtok(char* str, const char* delim);
In simple terms,
- str - the string from which we want to get the tokens
 - delim - the delimiting character i.e. the character that separates the tokens
 
strtok() Parameters
- str - pointer to the null-terminated byte string (C-string) to tokenize
 - delim - pointer to the null-terminated byte string that contains the separators
 
strtok() Return Value
The strtok() function returns:
- the pointer to the next token if there is any
 NULLvalue if no more tokens are found
strtok() Prototype
The prototype of the strtok() function as defined in the cstring header file is:
char* strtok(char* str, const char* delim);
Multiple Calls of strtok()
strtok() can be called multiple times to obtain tokens from the same string. There are two cases:
Case 1: str is not NULL
- This is the first call to 
strtok()for that string. - The function searches for the first character that is not contained in delim.
 - If no such character is found, the string does not contain any token. So a null pointer is returned.
 - If such a character is found, then from there on the function searches for a character that is present in delim.
		
- If no separator is found, str has only one token.
 - If a separator is found, it is replaced by 
'\0'and the pointer to the following character is stored in a static location for subsequent invocations. 
 - Finally, the function returns the pointer to the beginning of the token.
 
Case 2: str is NULL
- This call is considered as a subsequent call to 
strtok()with str. - The function continues from where it left in previous invocation.
 
Example 1: C++ strtok()
#include <cstring>
#include <iostream>
using namespace std;
int main() {
  char quote[] = "Remember me when you look at the moon!";
  // break the string when it encounters empty space
  // str = quote, delim = " "
  char* word = strtok(quote, " ");
  cout << "token1 = " << word << endl;
  // get the next token i.e. word before second empty space
  // NULL indicates we are using the same pointer we used previously i.e. quote
  word = strtok(NULL, " ");
  cout << "token2 = " << word;
  // get the third token
  word = strtok(NULL, " ");
  cout << "token3 = " << word;
  return 0;
}
Output
token1 = Remember token2 = me token3 = when
In this program,
- We have tokenized the quote C-string with an empty space 
" "as the delimiting character delim. This separates quote into tokens the every timestrtok()encounters a space" ". 
- The first time we call the function, we need to pass the quote string to specify that it is the source string parameter src.
char* word = strtok(quote, " "); - All subsequent calls to the 
strtok()function takeNULLas the src parameter. This argument instructs the compiler to use the previously-used pointer to C-string (i.e. quote) as the source src.
word = strtok(NULL, " "); 
Example 2: Print All Tokens in a String
#include <cstring>
#include <iostream>
using namespace std;
int main() {
  char str[] = "Remember me when you look at the moon!";
  char delim[] = " ";
  cout << "The tokens are:" << endl;
  // tokenize str in accordance with delim
  char *token = strtok(str,delim);
  // loop until strtok() returns NULL
  while (token)  {
    // print token
   cout << token << endl;
   
    // take subsequent tokens
    token = strtok(NULL,delim);
  }
  return 0;
}
Output
The tokens are: Remember me when you look at the moon!