/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

BUSCAR Y REEMPLAZAR SUBCADENAS

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Jupiter6789



Registrado: 05 Oct 2007
Mensajes: 3

MensajePublicado: 26/10/2007 7:51 am
Título: BUSCAR Y REEMPLAZAR SUBCADENAS

hola de nuevo por aqui... desde hace una semana intento q me salga un programita q sirva para

buscar una subcadena en una cadena mas grande y luego reemplazarla por otro subcadena dada por el usuario...

he intentado con for, while y nada...se q existe una funcion llamada find pero no se aplicarla muy bien ..alguien puede ayudarme porfa?
Volver arriba
v0x1



Registrado: 20 Oct 2007
Mensajes: 13

MensajePublicado: 26/10/2007 1:02 pm
Título:

Pon tus avances aqui y seguro que alguien te ayudara Smile.

Saludos y suerte.
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 240
Ubicación: Cono Sur

MensajePublicado: 26/10/2007 1:04 pm
Título:

Hola

Si no dices en qué lenguaje de programación lo estás desarrollando y no colocas el código -o parte de él- de lo que hiciste hasta entonces, pues es muy difícil darte una solución al respecto.

Si es C, la biblioteca estándar string.h posee un conjunto de funciones para el manejo de cadenas.

Un saludo
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3650
Ubicación: Mexico

MensajePublicado: 29/10/2007 5:04 pm
Título:

La biblioteca estandar de C no incluye ninguna funcion de nombre "find", esta debe ser especifica de tu compilador (o una biblioteca de terceros) como tampoco una funcion que realize la operacion que mencionas (busqueda y remplazo de subcadenas).

A modo de ejemplo esta funcion (parte de un proyecto en animacion suspendida con licencia X11 o MIT) realiza la mentada operacion:
Código:
/*
** Esta funcion crea en memoria reservada de forma dinamica una cadena
** que es identica a 'entrada' pero remplazando todas las instancias
** de la subcadena 'buscar' con la cadena 'remplazar'.
**
** Su valor de retorno es un puntero apuntando a la memoria reservada
** donde se almacena la nueva cadena o NULL en caso de un error interno.
**
** El parametro de salida 'ndr' indica el numero de remplazamientos que
** fueron realizados por la funcion.
*/
char *rem_cadena(char const *entrada, char const *buscar, char const *remplazar, size_t *ndr)
{
   char *salida;
   char *p;
   char *aux;
   
   size_t long_entrada   = strlen(entrada);
   size_t long_buscar    = strlen(buscar);
   size_t long_remplazar = strlen(remplazar);
   
   size_t long_salida;
   size_t i, j;
   
   /* Asercion: la cadena a buscar debe contener por lo menos un caracter */
   assert(long_buscar > 0);
   
   if (long_buscar >= long_remplazar)
      long_salida = long_entrada;
   else /* Reservar memoria suficiente para el peor escenario */
      long_salida = (long_entrada / long_buscar) * long_remplazar + long_entrada % long_buscar;
   
   if ((salida = malloc(long_salida + 1)) == NULL)
      return NULL;
   
   j = 0;
   if (ndr != NULL)
      *ndr = 0;
   
   do {
      if ((p = strstr(entrada, buscar)) == NULL)
         /*
         ** Si la cadena a buscar no se encuentra copiar el resto de
         ** la cadena de entrada reajustando al mismo tiempo el indice
         ** de la cadena de salida (j) y terminar el bucle (p == NULL).
         */
         j += sprintf(salida + j, "%s", entrada);
      else {
         /*
         ** Copiar todos los caracteres inmediatamente antes de la
         ** cadena a buscar.
         */
         for (i = 0; entrada + i < p; i++, j++)
            salida[j] = entrada[i];
         
         /*
         ** Copiar la cadena de remplazo y ajustar el indice de la
         ** cadena de salida (j).
         */
         j += sprintf(salida + j, "%s", remplazar);
         
         if (ndr != NULL)
            ++*ndr;
         
         /*
         ** La busqueda se continua a partir del caracter que sigue a la
         ** cadena de busqueda encontrada y a la cual apunta p.
         */
         entrada = p + long_buscar;
      }
   }while (p != NULL);
   
   if ((aux = realloc(salida, j + 1)) == NULL){
      free(salida);
      salida = NULL;
   }else /* aux != NULL */
      salida = aux;
   
   return salida;
}


Por desgracia los foros destruyen el formato del codigo y lo hacen muy dificil de visualizar a menos que se copie y pegue el texto en (que mas) un editor de texto decente.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com