elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  eliminar componente array
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: eliminar componente array  (Leído 1,890 veces)
mariano96

Desconectado Desconectado

Mensajes: 9


Ver Perfil
eliminar componente array
« 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


En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: eliminar componente array
« Respuesta #1 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.


« Última modificación: 13 Febrero 2015, 20:29 pm por fary » En línea

Un byte a la izquierda.
mariano96

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: eliminar componente array
« Respuesta #2 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.
En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: eliminar componente array
« Respuesta #3 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
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: eliminar componente array
« Respuesta #4 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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eliminar un elemento en un Array
Programación Visual Basic
edgar_allan 4 36,447 Último mensaje 16 Enero 2009, 02:17 am
por LeandroA
Eliminar y reemplazar registros en Array
.NET (C#, VB.NET, ASP)
luis456 3 3,678 Último mensaje 15 Enero 2014, 20:40 pm
por Eleкtro
Eliminar Elementos repetidos en un array
Programación C/C++
maikelowen 6 7,297 Último mensaje 8 Enero 2015, 10:21 am
por Orubatosu
Eliminar las posiciones pares de un array y comprimir el array
Java
sevedeboa 8 14,812 Último mensaje 26 Enero 2015, 15:52 pm
por sevedeboa
Eliminar fila de un DataGrirdView enlazado a un array
Programación General
leopaez 0 1,688 Último mensaje 22 Mayo 2017, 21:10 pm
por leopaez
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines