Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/11/2011, 20:46
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Eliminar caracteres pares o impares en C

Decidi cambiarte entera tu funcion, porque lo que propones se puede llegar a complicar mas.

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. char * EliminarParesImpares(char * cadena )
  4. {
  5.     char * nueva,a;
  6.     int l=strlen(cadena), init,i,j;
  7.  
  8.     nueva = (char *) malloc (l * sizeof(char));
  9.     printf("\nEliminar pares o impares <p/i>: ");
  10.     a=getchar();
  11.     if (a=='p') init = 0;
  12.     else init = 1;
  13.     j=0;
  14.     for (i=init;i < l;  i = i +2)
  15.         nueva[j++] = cadena[i];
  16.     nueva[j] = '\0';
  17.     return nueva;
  18. }
  19.  
  20. int main()
  21. {
  22.     char * c = EliminarParesImpares("0123456789");
  23.     printf("%s\n",c);
  24.     return 0;
  25. }

La idea es la siguiente, en vez de modificar esa cadena, creamos una nueva y vamos a ir copiando los elementos ahi.
Uso malloc para reservear memoria para la cadena. un char nueva[50]; me crearia problemas ya que al devolver la funcion esta deja de existir, ademas tendria una limitacion.

Luego lo que hago es recorrer la cadena de dos en dos, empezando por cero si es par o por 1 si es impar. Asi voy copiando cada elemento a la cadena nueva. Esta va aumentando, por supuesto, de uno en uno...

Supongo que hay muchas cosas que no vas a entender ahora... pero con el tiempo vas a encontrarle el sentido.

La funcion devuelve un puntero a la nueva cadena.

Cualquier cosas pregunta.