• Domingo 15 de Diciembre de 2024, 08:42

Autor Tema:  Hay Una Funcion Split En C?  (Leído 4907 veces)

steel

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Hay Una Funcion Split En C?
« en: Miércoles 1 de Junio de 2005, 10:56 »
0
Hola, queria preguntar si conoceis de alguna funcion  de strings de C que valga para lo mismo que la funcion split de python.

Por si no la conoceis, es una funcion que dada una cadena y un caracter, te coge la parte de la cadena que se encuentra hasta llegar a aese caracter.

 Un ejemplo: si tenemos un archivo de texto guarado que queremos leer, y este archivo se compone de nombres de personas separados por caracteres '/', a la funcion split le diriamos que de cada linea leida de ese fichero, me coja el primer nombre que encuentre desde donde esta el puntero de lectura hasta el primer caracter '/' que encuentre.

 De momento en C esto tengo que hacerlo viendo cada caracter cual es y si encuentro este '/', pues lo anterior leido es lo que me vale.


Me podeis ayudar?..


JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Hay Una Funcion Split En C?
« Respuesta #1 en: Miércoles 1 de Junio de 2005, 12:57 »
0
no hay ( hasta donde recuerdo).
debes hacerla.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Hay Una Funcion Split En C?
« Respuesta #2 en: Miércoles 1 de Junio de 2005, 13:46 »
0
No conozco el lenguaje Python y menos esa función de la que hablas, pero tal como la describes es fácil implementar una versión en C que haga lo mismo. Aquí te paso un pequeño ejemplo de cómo podrías hacerlo usando las funciones strstr que te encuentra una cadena dentro de otra y strncpy que te copia n caracteres de una cadena a otra (sin añadirle el caracter nulo '\0'). La función strstr te regresa un apuntador a la primera subcadena que encontró y el valor nulo en caso contrario. Como no sé que regresa la función split que mencionas en caso de que no encuentre el caracter que le das, pues lo que yo hice fue copiar toda la cadena. En el ejemplo no compruebo errores de desborde de la memoria de los arreglos para no poner más código.
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. char *split (char *dest, char *orig, char ch);
  7.  
  8. main ()
  9. {
  10.    char cadena[] = "Martin/Luis/Pedro/Pablo";
  11.    char s[80], *ap = cadena;
  12.    while (1) {
  13.       ap = split (s, ap, '/');
  14.       printf ("%s\n", s);
  15.       if (ap == NULL)
  16.          break;
  17.    }
  18.    system ("pause");
  19. }
  20.  
  21. char *split (char *dest, char *orig, char ch)
  22. {
  23.    char *ap, cad2[2] = " ";
  24.    cad2[0] = ch;
  25.    if ((ap = strstr (orig, cad2)) == NULL) {
  26.       strcpy (dest, orig);
  27.       return NULL;
  28.    } else {
  29.       strncpy (dest, orig, ap - orig);
  30.       *(dest + (ap - orig)) = '\0';
  31.       return ap + 1;
  32.    }
  33. }
  34.  
  35.  

steel

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re: Hay Una Funcion Split En C?
« Respuesta #3 en: Miércoles 1 de Junio de 2005, 15:06 »
0
muchas gracias por responder tan rapido, el caso es que la funcion split te devuelve la el trozo de cadena que ha encontrado hasta justo antes del caracter que tu le pongas.

El hecho de hacer una funcion en C, si que se como hacerla, pero como es un poco costoso (ahora con tu codigo ya no), yo preguntaba si habian incluido en <string.h> alguna funcion que hiciera eso.


Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Hay Una Funcion Split En C?
« Respuesta #4 en: Jueves 2 de Junio de 2005, 13:47 »
0
Hola.

En C tienes la función strtok(), que permite ir partiendo una cadena de texto estableciendo los caracteres que quieras como delimitadores de cada fragmento (lo que tú pides).

Un saludo.

Ruben3d

steel

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re: Hay Una Funcion Split En C?
« Respuesta #5 en: Domingo 5 de Junio de 2005, 11:53 »
0
joe, eso es justo lo que buscaba, te doy mil gracias de verdad, anda que no me has facilitado las cosas....