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