Realización de strtok en C
Estoy haciendo mi propia versión de Strtok en C.
Casi he terminado, sin embargo, la última parte que necesitaba la encontré en internet y realmente no entiendo lo que hace. Eventualmente entendí lo que hace, pero aún no entiendo por qué funciona. Me falta teoría ;(
char* strtok_sad(char* str, const char* delim) {
static char* next = 0;
if (str) {
next = str;
}
if (*next == 0) {
return NULL;
}
char* c = next;
while(strchr(delim,*c)) {
++c;
}
if (*c == 0) {
return NULL;
}
char* word = c;
while(strchr(delim,*c)==0) {
++c;
}
if (*c == 0) {
next = c;
return word;
}
*c = 0;
next = c+1;
return word;
}
¿Alguien puede explicar esta parte o al menos enviarme un artículo donde se explique?
*c = 0;
next = c+1;
¡Gracias!
davy.ai
El fragmento de código
*c = 0; next = c+1;
se utiliza para terminar la palabra actual que se extrae de la cadena de entrada, y para establecernext
como el inicio de la siguiente palabra (si está disponible) en la cadena de entrada.En detalle,
c
es un puntero al carácter actual que se examina en la cadena de entrada. Cuando se encuentra un carácter delimitador, el bucle que utilizastrchr
se detiene y se estableceword
como la dirección del primer carácter de la palabra actual, yc
apunta al siguiente delimitador o al carácter de final de cadena.La línea
*c = 0;
reemplaza el delimitador con un carácter nulo, terminando así la palabra actual.next = c+1;
establecenext
como el inicio de la siguiente palabra en la cadena de entrada, que esc+1
ya quec
apunta al delimitador que termina la palabra actual.Este fragmento de código se utiliza comúnmente en funciones de tokenización de cadenas para dividir una cadena en palabras o tokens individuales, según un carácter delimitador. Aquí, la función
strtok_sad
es una versión modificada de la función de la biblioteca estándarstrtok
, que utiliza un puntero estáticonext
para realizar un seguimiento del estado a lo largo de múltiples llamadas a la función.Si deseas obtener más información sobre la tokenización de cadenas, puedes consultar los siguientes recursos:
¡Espero que esto te ayude!