Funciones strtok() y strtok_r() en C con ejemplos

C proporciona dos funciones strtok() y strtok_r() para dividir una string por algún delimitador. Dividir una string es una tarea muy común. Por ejemplo, tenemos una lista de elementos separados por comas de un archivo y queremos elementos individuales en una array. 

 Método strtok() :  divide str[] de acuerdo con los delimitadores dados y devuelve el siguiente token. Debe llamarse en un bucle para obtener todos los tokens. Devuelve NULL cuando no hay más tokens.

char * strtok(char str[], const char *delims);

Ejemplo:

C

// C/C++ program for splitting a string
// using strtok()
#include& lt; stdio.h & gt;
#include& lt; string.h & gt;
 
int main()
{
    char str[] = "Geeks-for-Geeks"
    ;
 
    // Returns first token
    char* token = strtok(str, " - ");
 
    // Keep printing tokens while one of the
    // delimiters present in str[].
    while (token != NULL) {
        printf(" % s\n & quot;, token);
        token = strtok(NULL, " - ");
    }
 
    return 0;
}

Producción: 

Geeks
for
Geeks

strtok_r(): Al igual que la función strtok() en C, strtok_r() hace la misma tarea de analizar una string en una secuencia de tokens. strtok_r() es una versión reentrante de strtok(). Hay dos formas de llamar a strtok_r() 

// The third argument saveptr is a pointer to a char * 
// variable that is used internally by strtok_r() in 
// order to maintain context between successive calls
// that parse the same string.
char *strtok_r(char *str, const char *delim, char **saveptr);

A continuación se muestra un programa C simple para mostrar el uso de strtok_r() :
 

CPP

// C program to demonstrate working of strtok_r()
// by splitting string based on space character.
#include <stdio.h>
#include <string.h>
 
int main()
{
    char str[] = "Geeks for Geeks";
    char* token;
    char* rest = str;
 
    while ((token = strtok_r(rest, " ", &rest)))
        printf("%s\n", token);
 
    return (0);
}

Producción: 

Geeks
for
Geeks

Ejemplo 2 

C

// C code to demonstrate working of
// strtok
#include <stdio.h>
#include <string.h>
 
// Driver function
int main()
{
    // Declaration of string
    char gfg[100] = " Geeks - for - geeks - Contribute";
 
    // Declaration of delimiter
    const char s[4] = "-";
    char* tok;
 
    // Use of strtok
    // get first token
    tok = strtok(gfg, s);
 
    // Checks for delimiter
    while (tok != 0) {
        printf(" %s\n", tok);
 
        // Use of strtok
        // go through other tokens
        tok = strtok(0, s);
    }
 
    return (0);
}

Producción: 

Geeks
for
geeks
Contribute

Aplicación práctica: strtok se puede usar para dividir una string en varias strings en función de algunos separadores. Se podría implementar un soporte de archivo CSV simple utilizando esta función. Los archivos CSV tienen comas como delimitadores.

Ejemplo:

C

// C code to demonstrate practical application of
// strtok
#include <stdio.h>
#include <string.h>
 
// Driver function
int main()
{
    // Declaration of string
    // Information to be converted into CSV file
    char gfg[100] = " 1997 Ford E350 ac 3000.00";
 
    // Declaration of delimiter
    const char s[4] = " ";
    char* tok;
 
    // Use of strtok
    // get first token
    tok = strtok(gfg, s);
 
    // Checks for delimiter
    while (tok != 0) {
        printf("%s, ", tok);
 
        // Use of strtok
        // go through other tokens
        tok = strtok(0, s);
    }
 
    return (0);
}

Producción: 

1997, Ford, E350, ac, 3000.00,

Veamos las diferencias en forma tabular como se muestra a continuación de la siguiente manera: 

strtok()  strtok_r() 
Se utiliza para dividir la string str en una serie de tokens. Se utiliza para decodificar una string en un patrón para tokens.

La sintaxis es la siguiente:

char *strtok(char *str, const char *delim)

Su sintaxis es la siguiente:
char *strtok_r(char *string, const char *limiter, char **context);
Utiliza el delimitador para continuar. Es una variante reingresada de strtok().
Toma dos parámetros. Toma tres parámetros.
Su valor de retorno es un puntero al primer token encontrado en la string. Se define en el archivo de encabezado <string.h>

Este artículo es una contribución de MAZHAR IMAM KHAN y shantanu_23 . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *