Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mariano96 en 13 Febrero 2015, 19:32 pm



Título: eliminar componente array
Publicado por: mariano96 en 13 Febrero 2015, 19:32 pm
Hola de nuevo xD,

tengo un problema con este programa:

int eliminaTodasApariciones(char orig[], char c, char dest[]){
   int i,j,numElim;

   numElim = 0;
   
   for (i = 0; i < strlen(orig); i++){
      for (j = i; j < strlen(orig); j++){
         
         if (orig != c){
            dest[j] = orig;
            dest[j + 1] = '\0';
         }
         
      }
      if(orig == c){

         numElim++;

      }
   }

   return numElim;
}

Se supone que tiene que eliminar el caracter que indique en la cadena pero al ejecutarlo pongo "hola" y el caracter a eliminar ('o') y en lugar de devolverme "hla" me devuelve hhla.
AYUDA please


Título: Re: eliminar componente array
Publicado por: fary en 13 Febrero 2015, 20:27 pm
Te complicas mucho, fíjate en este ejemplo que te he preparado.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char * EliminaCaracter(char * cadena, char caracter);
  6.  
  7. int main()
  8. {
  9.    char * cadena = "hola";
  10.    char c = 'o';
  11.  
  12.    char * resul = EliminaCaracter(cadena,c);
  13.  
  14.    printf("%s\n",resul);
  15.  
  16.    free(resul);
  17.    return 0;
  18. }
  19.  
  20.  
  21. char * EliminaCaracter(char * cadena, char caracter)
  22. {
  23.    char * buffer = malloc(strlen(cadena));
  24.  
  25.    int i,a=0;
  26.  
  27.    for (i=0;*(cadena+i)!= '\0';i++)
  28.    {
  29.        if (*(cadena+i) != caracter)
  30.        {
  31.            buffer[a] = *(cadena+i);
  32.            a++;
  33.        }
  34.    }  
  35.    return buffer;      
  36. }

Simplemente copias en un nuevo buffer todos los caracteres que no coincidan con el que quieres eliminar.

saludos.


Título: Re: eliminar componente array
Publicado por: mariano96 en 13 Febrero 2015, 20:57 pm
Gracias por el aporte y tu tiempo pero tengo que hacerlo usando otra cadena (cadena de destino) y, además, hay conceptos en tu código que todavía no he dado.


Título: Re: eliminar componente array
Publicado por: crack81 en 14 Febrero 2015, 03:25 am
El ejemplo que te dio es una buena solucion lo que dices de cadena destino seria muy similar porque tambien tendra que un llenar puntero de char, asi que para hacer eso hay que reservar memoria

lo otro seria como tu ejemplo usando arreglo de caracteres pero no es lo mas correcto ni en c ni en c++ porque estarias creando posicion en tiempo de ejecucion de una manera no optima ya que de esa forma la estarias guardando en la pila

hacer esto char datos[strlen(tamano)];//no es correcto pero puede ser que corra ya que se guardara en la pila

lo mas correcto es reservar memoria como es el caso de malloc


Título: Re: eliminar componente array
Publicado por: rir3760 en 14 Febrero 2015, 05:20 am
Simplemente copias en un nuevo buffer todos los caracteres que no coincidan con el que quieres eliminar.
Dos comentarios sobre tu programa: 1) En la llamada a malloc hay que reservar un carácter adicional para prevenir el caso donde el carácter a buscar no se encuentre en la cadena y 2) Falta agregar el '\0' a la nueva cadena.

----

Gracias por el aporte y tu tiempo pero tengo que hacerlo usando otra cadena (cadena de destino)
El ejemplo de fary muestra la forma mas simple de realizar la operación, no encontraras una mas fácil y por ello no debes tener problemas al aplicarla a tu programa, si los tienes publica el código fuente actualizado.

Un saludo