khuang8493
7/4/2018 - 12:25 AM

Seperate a string in tokens using strtok()

The C library function char *strtok(char *str, const char *delim) breaks string str into a series of tokens using the delimiter delim.

Description

The C library function char *strtok(char *str, const char *delim) breaks string str into a series of tokens using the delimiter delim.

This function is part of <string.h>

Declaration
Following is the declaration for strtok() function.

char *strtok(char *str, const char *delim)
Parameters
str − The contents of this string are modified and broken into smaller strings (tokens).

delim − This is the C string containing the delimiters. These may vary from one call to another.

Return Value
This function returns a pointer to the first token found in the string. A null pointer is returned if there are no tokens left to retrieve.

Example
The following example shows the usage of strtok() function.

#include <string.h>
#include <stdio.h>

int main () {
   char str[80] = "This is - www.tutorialspoint.com - website";
   const char s[2] = "-";
   char *token;
   
   /* get the first token */
   token = strtok(str, s);
   
   /* walk through other tokens */
   while( token != NULL ) {
      printf( " %s\n", token );
    
      token = strtok(NULL, s);
   }
   
   return(0);
}
Let us compile and run the above program that will produce the following result −

This is 
www.tutorialspoint.com 
website

Another example:

How we represent a music note:

A#4@1/8

In the code:

  // Parse line into note and duration
      string note = strtok(line, "@");
      string fraction = strtok(NULL, "@");
      
      
We also did the same thing when calculating the duration of the music note:

Like if the fraction we get is X/Y, we would parse this string into nominator and denominator of the fraction, and then we can calculate it.

// Parse length into d and e
    string d = strtok(length, "/");
    string e = strtok(NULL, "/");
    
So d is the top of the fraction, e is the bottom of the fraction. Then we can calculate.