Cómo dividir las cuerdas basadas en delimitador en c

Cómo dividir las cuerdas basadas en delimitador en c
La cadena es la matriz de caracteres y delimitador puede ser cualquier matriz de caracteres o cualquier carácter especial, que se puede usar para dividir la cadena en múltiples subcadenas. Delimitador será parte de la cadena. Revisaremos la implementación de ejemplo y también implementaremos una parte del código C para dividir la cadena.

Cadena: La cadena es una variedad de caracteres. Un par de ejemplos de cuerdas son:

"Nueva Delhi es capital de la India"
"Bob está estudiando en la Universidad de Stanford"

Delimitador: Cualquier carácter o conjunto de caracteres puede considerarse como delimitador. Si se va a dividir una cadena en función de Delimiter, entonces Delimiter debe ser parte de la cadena o de lo contrario la cadena completa será la cadena de salida.

Los ejemplos delimitadores de uso común son: "" (espacio), (coma), '\ n' (nueva línea) y muchos más.

Dividir la cadena basada en delimitador:

Consideremos una cuerda de ejemplo como "Fox vive en bosque" y delimitador como "" (espacio), luego la cuerda se dividirá en múltiples cuerdas. Múltiples cuerdas después de la división serán "Fox" "Vives" "en" "bosques".

Entonces, ahora, tenemos claro el concepto de división y también, ahora estamos claros en la definición de cadena y delimitador. Procedamos explorando la implementación de la división en c.

Función C estándar para división basada en delimitador:

C proporciona el Strtok () función, que se puede usar para dividir la cadena en tokens en función del delimitador seleccionado.

Prototipo de función:

char *strtok (char *restringir stri, const char *restringir delicarse);

Encabezado que se incluirá:

#incluir

C programa para dividir la cadena basada en delimitador usando strtok ():

#incluir
#incluir
int main ()

Char String [] = "Bob está estudiando en la Universidad de Stanford";
char *delim = "";
recuento sin firmar = 0;
/* La primera llamada a Strtok debe realizarse con String y Delimiter como el primer y segundo parámetro*/
char *token = strtok (cadena, delimitación);
contar ++;
/* Las llamadas consecutivas al STRTOK deben estar con el primer parámetro como parámetro nulo y segundo como delimitador
* * El valor de retorno del strtok será la cadena dividida basada en delimitador */
mientras (token != Nulo)

printf ("Token No. %d: %s \ n ", recuento, token);
token = strtok (nulo, delimitación);
contar ++;

regresar 0;

Instantánea del programa C:

Salida del programa:

Ahora, discutamos nuestra propia implementación para dividir String en función de delimitador sin usar la función C estándar (strtok ()).

Debemos buscar la presencia del delimitador en la cadena y podemos devolver la dirección del primer carácter del token de cadena justo antes del delimitador.

C La función para buscar el token basado en delimitador se puede implementar como se muestra a continuación:

char *search_token (char *string, char *delim)

Char estático *recordar = nulo;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == nulo)
regresar nulo;
if ((string == null) && (recuerda == null))
regresar nulo;
if (string == null)
cadena = recordar;
string_length = strlen (string) + 1;
para (i = 0; i
if (string [i] == Delim [0])

Search_hit = 1;
romper;


if (search_hit != 1)

recordar = nulo;
cadena de retorno;

cadena [i] = '\ 0';
if ((cadena+i+1) != Nulo)
recordar = cadena + i + 1;
demás
recordar = nulo;
cadena de retorno;

Arriba está la función de búsqueda para buscar el token, una vez que se encuentra el token, el carácter antes de que el token pueda copiarse y obtener desde el búfer de cadena de origen.

El programa C completo con nuestra implementación se verá a continuación:

#incluir
#incluir
char *search_token (char *string, char *delim)

Char estático *recordar = nulo;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == nulo)
regresar nulo;
if ((string == null) && (recuerda == null))
regresar nulo;
if (string == null)
cadena = recordar;
string_length = strlen (string) + 1;
para (i = 0; i
if (string [i] == Delim [0])

Search_hit = 1;
romper;


if (search_hit != 1)

recordar = nulo;
cadena de retorno;

cadena [i] = '\ 0';
if ((cadena+i+1) != Nulo)
recordar = cadena + i + 1;
demás
recordar = nulo;
cadena de retorno;

int main ()

Char String [] = "Bob está estudiando en la Universidad de Stanford";
char *delim = "";
recuento sin firmar = 0;
char *token;
printf ("String completo = %s \ n", cadena);
/* La primera llamada a Search_Toekn debe realizarse con String y Delimiter como el primer y segundo parámetro*/
token = search_token (cadena, delimitación);
// printf ("Token No. %d: %s \ n ", recuento, token);
contar ++;
/* Las llamadas consecutivas al STRTOK deben estar con el primer parámetro como parámetro nulo y segundo como delimitador
* * El valor de retorno del strtok será la cadena dividida basada en delimitador */
mientras (token != Nulo)

printf ("Token No. %d: %s \ n ", recuento, token);
token = search_token (nulo, delimitación);
contar ++;

regresar 0;

Salida del programa anterior con la misma entrada establecida a partir de la función C Strtok estándar:

bash-4.2 $ ./a.afuera
Cadena completa = Bob está estudiando en la Universidad de Stanford
Token No. 1: Bob
Token No. 2: es
Token No. 3: Estudiar
Token No. 4: en
Token No. 5: Stanford
Token No. 6: Universidad
bash-4.2 $

Instantáneas del programa completo:

Instantánea de salida:

Conclusión:

Hasta ahora, discutimos sobre la división de la cadena basada en delimitador. Ya hay formas de biblioteca disponibles para hacerlo. La función de biblioteca que se puede usar para dividir la cadena basada en delimitador es Strtok. Tomamos un caso de uso de ejemplo para comprender la función de la biblioteca Strtok. Además, escribimos un programa de ejemplo para comprender el uso de la función de la biblioteca.

Segunda parte, implementamos nuestro propio método para dividir la cadena basada en delimitador. Escribimos una función que es como la función c strtok. La explicación del funcionamiento de la función personalizada se proporcionó y demostró con la ayuda de la misma función principal que se tomó en el caso de la función de la biblioteca C. La salida de ejemplo del programa también se proporciona con el programa de ejemplo.

También hemos pasado por el concepto de división de cadena basado en delimitador, solo para resumir cualquier carácter que se busque en la cadena principal puede considerarse como un token y se puede buscar hasta que se encuentre el token. Una vez que se encuentra el token, la cadena antes de que el token vuelva a la función de la persona que llama.