Use a função strtok em C
-
Use a função
strtok
para tokenizar string com determinado delimitador -
Use a função
strtok_r
para tokenizar string com dois delimitadores
Este artigo irá demonstrar vários métodos sobre como usar a função strtok
em C.
Use a função strtok
para tokenizar string com determinado delimitador
A função strtok
é parte da biblioteca padrão C definida no arquivo de cabeçalho <string.h>
. Ele divide a string fornecida em tokens divididos pelo delimitador especificado. strtok
leva dois argumentos - um ponteiro para a string a ser tokenizada como o primeiro parâmetro e a string delimitadora como o segundo. Observe que a string do delimitador é processada como um conjunto de caracteres, denotando o delimitador separado. A função retorna o ponteiro para uma string terminada em nulo, que representa o próximo token. Lembre-se, porém, de que quando a mesma string é analisada com várias chamadas strtok
, o primeiro argumento do ponteiro deve ser NULL
após a chamada de função inicial.
#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);
}
Comando de amostra:
./program "Temporary string to be parsed" " "
Resultado:
1: Temporary
2: string
3: to
4: be
5: parsed
Use a função strtok_r
para tokenizar string com dois delimitadores
Alternativamente, outra versão da função está disponível, chamada strtok_r
, que é uma variante reentrante mais adequada para programas multi-threaded. Ambas as funções modificam a string passada como o primeiro argumento e não podem estar em strings constantes. O código de exemplo a seguir simboliza a string fornecida em uma hierarquia de dois níveis. O primeiro consiste em tokens divididos nos delimitadores passados como o segundo argumento para o programa. O loop interno divide cada token da tokenização inicial e, finalmente, o programa envia os resultados para o console.
#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);
}
Comando de amostra:
./program "Temporary string to be parsed" " " "aeio"
Resultado:
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