Implementación de la función strtok() en C++

La función strtok() se utiliza para tokenizar una string en función de un delimitador. Está presente en el archivo de encabezado » string.h» y devuelve un puntero al siguiente token si está presente, si el siguiente token no está presente, devuelve NULL. Para obtener todos los tokens, la idea es llamar a esta función en un bucle.

Archivo de cabecera:

#include <string.h>

Sintaxis: 

char *strtok(char *s1, const char *s2);

En este artículo, discutiremos la implementación de esta función en la que se deben tener en cuenta dos cosas:

  • Mantenga el estado de la string para asegurarse de cuántos tokens ya hemos extraído.
  • En segundo lugar, mantenga la lista de tokens extraídos en una array para devolverla.

Pasos:

  • Cree una función strtok() que acepte una string y un delimitador como argumento y devuelva un puntero de caracteres.
  • Cree una entrada de variable estática para mantener el estado de la string.
  • Compruebe si extrae los tokens por primera vez y luego inicialice la entrada con ellos.
  • Si la entrada es NULL y se extraen todos los tokens, devuelva NULL.
  • En este paso, comience a extraer tokens y guárdelos en la array result[] .
  • Ahora, itere un ciclo hasta que ocurra NULL o el delimitador luego devuelva el resultado incluyendo ‘\0’ .
  • Cuando se alcance el final de la string y si es necesario, agregue manualmente un ‘\0 ‘ e incluya este caso de esquina al final.

A continuación se muestra la implementación del mismo:

C++

// C++ program to demonstrate the function
// strtok() to tokenized the string
#include <bits/stdc++.h>
using namespace std;
char* mystrtok(char* s, char d)
{
    // Stores the state of string
    static char* input = NULL;
 
    // Initialize the input string
    if (s != NULL)
        input = s;
 
    // Case for final token
    if (input == NULL)
        return NULL;
 
    // Stores the extracted string
    char* result = new char[strlen(input) + 1];
    int i = 0;
 
    // Start extracting string and
    // store it in array
    for (; input[i] != '\0'; i++) {
 
        // If delimiter is not reached
        // then add the current character
        // to result[i]
        if (input[i] != d)
            result[i] = input[i];
 
        // Else store the string formed
        else {
            result[i] = '\0';
            input = input + i + 1;
            return result;
        }
    }
 
    // Case when loop ends
    result[i] = '\0';
    input = NULL;
 
    // Return the resultant pointer
    // to the string
    return result;
}
 
// Driver Code
int main()
{
    // Given string str
    char str[90] = "It, is my, day";
 
    // Tokenized the first string
    char* ptr = mystrtok(str, ' ');
 
    // Print current tokenized string
    cout << ptr << endl;
 
    // While ptr is not NULL
    while (ptr != NULL) {
        // Tokenize the string
        ptr = mystrtok(NULL, ' ');
 
        // Print the string
        cout << ptr << endl;
    }
    return 0;
}
Producción: 

It,
is
my,
day

 

Publicación traducida automáticamente

Artículo escrito por NANDINIJAIN y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *