es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  ,

Answer

  1. Avatar for 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 establecer next 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 utiliza strchr se detiene y se establece word como la dirección del primer carácter de la palabra actual, y c 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; establece next como el inicio de la siguiente palabra en la cadena de entrada, que es c+1 ya que c 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ándar strtok, que utiliza un puntero estático next 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:

    • El lenguaje de programación C de Brian W. Kernighan y Dennis M. Ritchie.
    • Biblioteca estándar de C de Tutorialspoint – Cadena.
    • Función strtok() de GeeksforGeeks en C.

    ¡Espero que esto te ayude!

Comments are closed.