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