Uso de la función strtok en C
-
Usar la función
strtok
para tokenizar una cadena con un delimitador dado -
Usar la función
strtok_r
para analizar una cadena con dos delimitadores
Este artículo demostrará múltiples métodos sobre cómo usar la función strtok
en C.
Usar la función strtok
para tokenizar una cadena con un delimitador dado
La función strtok
es parte de la biblioteca estándar de C definida en el archivo de cabecera <string.h>
. Rompe la cadena dada en tokens divididos por el delimitador especificado. strtok
toma dos argumentos: un puntero a la cadena que se va a dividir en tokens como primer parámetro y la cadena delimitadora como segundo. Tenga en cuenta que la cadena delimitadora se procesa como un conjunto de caracteres, denotando al delimitador separado. La función devuelve el puntero a una cadena terminada en cero, que representa el siguiente token. Sin embargo, cuando la misma cadena es analizada con múltiples llamadas a strtok
, el primer argumento del puntero debe ser NULL
después de la llamada inicial a la función.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *str1, *token;
int j;
if (argc != 3) {
fprintf(stderr, "Usage: %s string delim\n", argv[0]);
exit(EXIT_FAILURE);
}
for (j = 1, str1 = argv[1];; j++, str1 = NULL) {
token = strtok(str1, argv[2]);
if (token == NULL) break;
printf("%d: %s\n", j, token);
}
exit(EXIT_SUCCESS);
}
Ejemplo de comando:
./program "Temporary string to be parsed" " "
Producción :
1: Temporary
2: string
3: to
4: be
5: parsed
Usar la función strtok_r
para analizar una cadena con dos delimitadores
Como alternativa, existe otra versión de la función llamada strtok_r
, que es una variante reentrante más adecuada para programas multihilo. Ambas funciones modifican la cadena pasada como primer argumento, y no pueden ser sobre cadenas constantes. El siguiente código de ejemplo tokeniza la cadena dada en una jerarquía de dos niveles. El primero consiste en tokens divididos en los delimitadores pasados como segundo argumento al programa. El bucle interno divide cada uno de los tokens de la tokenización inicial y, finalmente, el programa envía los resultados a la consola.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *str1, *str2, *token, *subtoken;
char *saveptr1, *saveptr2;
int j;
if (argc != 4) {
fprintf(stderr, "Usage: %s string delim subdelim\n", argv[0]);
exit(EXIT_FAILURE);
}
for (j = 1, str1 = argv[1];; j++, str1 = NULL) {
token = strtok_r(str1, argv[2], &saveptr1);
if (token == NULL) break;
printf("%d: %s\n", j, token);
for (str2 = token;; str2 = NULL) {
subtoken = strtok_r(str2, argv[3], &saveptr2);
if (subtoken == NULL) break;
printf(" --> %s\n", subtoken);
}
}
exit(EXIT_SUCCESS);
}
Ejemplo de comando:
./program "Temporary string to be parsed" " " "aeio"
Producción :
1: Temporary
--> T
--> mp
--> r
--> ry
2: string
--> str
--> ng
3: to
--> t
4: be
--> b
5: parsed
--> p
--> rs
--> d
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook