Utilice la función strsep en C
Este artículo demostrará varios métodos sobre cómo utilizar la función strsep
en C.
Utilice la función strsep
para encontrar el token dado en la cadena
strsep
es parte de las utilidades de cadena de la biblioteca estándar de C definidas en el archivo de encabezado <string.h>
. Se puede utilizar para extraer tokens rodeados por los caracteres delimitadores dados del objeto de cadena.
strsep
toma dos argumentos: puntero a char *
y puntero a char
. El primer argumento se usa para pasar la dirección de la cadena de caracteres que debe buscarse. El segundo parámetro especifica un conjunto de caracteres delimitadores, que marcan el comienzo y el final de los tokens extraídos. Tenga en cuenta que los caracteres delimitadores se descartan en las cadenas de tokens extraídas. Cuando se encuentra el primer token, el primer argumento se modifica para almacenar el puntero al siguiente delimitador encontrado.
En el siguiente ejemplo, demostramos cómo extraer dos tokens delimitados con el carácter dado usando la única llamada a strsep
. Observe que el programa toma la cadena y el conjunto delimitador de los 2 argumentos de la línea de comando y sale con falla si no se proporciona según sea necesario. A continuación, duplicamos la cadena con la llamada a la función strdupa
ya que strsep
modifica el puntero pasado, y no queremos perder el valor original. strdupa
asigna memoria dinámica en la pila, y la persona que llama no debe liberar el puntero devuelto por ella.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *str1, *token;
if (argc != 3) {
fprintf(stderr, "Usage: %s string delim\n", argv[0]);
exit(EXIT_FAILURE);
}
str1 = strdupa(argv[1]);
if (!str1) exit(EXIT_FAILURE);
token = strsep(&str1, argv[2]);
if (token == NULL) exit(EXIT_FAILURE);
printf("extracted: '%s'\n", token);
printf("left: '%s'\n", str1);
exit(EXIT_SUCCESS);
}
Comando de muestra:
./program "hello there" t
Producción :
extracted: 'hello '
left: 'here'
Alternativamente, podemos implementar el bucle for
que llama a la función strsep
consecutivamente y extrae cada token con los delimitadores dados en lugar de solo el que se encontró primero, como se ve en el código de ejemplo anterior. Sin embargo, tenga en cuenta que strsep
devuelve una cadena vacía cuando hay dos caracteres delimitadores en una fila; por lo tanto, la persona que llama es responsable de verificar esto antes de procesar los tokens de resultado. También se proporciona una funcionalidad similar con ligeras diferencias utilizando las funciones de biblioteca strtok
y strtok_r
descritas en detalle en esta página.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *str1, *token;
if (argc != 3) {
fprintf(stderr, "Usage: %s string delim\n", argv[0]);
exit(EXIT_FAILURE);
}
str1 = strdupa(argv[1]);
if (!str1) exit(EXIT_FAILURE);
for (int j = 1;; j++) {
token = strsep(&str1, argv[2]);
if (token == NULL) break;
printf("%d: '%s'\n", j, token);
}
exit(EXIT_SUCCESS);
}
Comando de muestra:
./program "hello there" tl
Producción :
1: 'he'
2: ''
3: 'o '
4: 'here'
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