Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/04/2016, 21:13
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Respuesta: Duda en pequeño ejercicio

Que relajo.

Incluso es difícil seguir el código. Antes de poder llegar a la solucion de tu duda hay que limpiar el código:

Primero, realmente no necesitas la variable cont. Ya tienes i:

Código C++:
Ver original
  1. for (i = 0; pepe != 5; i++)
  2.     {
  3.         if (cadena[i] == NULL)
  4.         {
  5.             for (x = i; x != 0; x--, i++)
  6.             {
  7.                 cadena[i] = cadena[x - 1];
  8.                 pepe = 5;
  9.             }
  10.         }
  11.     }

Si te das cuenta, no necesitas 2 fors anidados. Puedes sacar el interior y todo se simplifica. Ya no necesitas a pepe:



Código C++:
Ver original
  1. printf("Introduce una palabra: ");
  2.     gets(cadena);
  3.  
  4.     for (i = 0; ; i++)
  5.     {
  6.         if (cadena[i] == NULL)
  7.         {
  8.             break;
  9.         }
  10.     }
  11.  
  12.     for (x = i; x != 0; x--, i++)
  13.     {
  14.         cadena[i] = cadena[x - 1];
  15.     }
  16.  
  17.     printf("CADENA %s", cadena);

Ya se ve mucho mas simple no?

Aun se puede simplificar mas. Podemos unir el if con el for:

Código C++:
Ver original
  1. for (i = 0; cadena[i] != 0; i++)
  2.     {
  3.     }

Y como veo que ya incluyes string.h, entonces puedes puedes sustituir por:

Código C++:
Ver original
  1. i=strlen(cadena);

Ahora, en el segundo for: Tienes un pequeño detalle:

Código C++:
Ver original
  1. for (x = i; x != 0; x--, i++)
  2.     {
  3.         cadena[i] = cadena[x - 1];
  4.     }
La posición 0 también se debe incluir por lo que mejor usa:

Código C++:
Ver original
  1. for (x = i; x >=0; x--, i++)
  2.     {
  3.         cadena[i] = cadena[x - 1];
  4.     }

Finalmente, para que no te salga basura, debes inicializar tu arreglo char con todos sus elementos a 0. Porque printf va a leer el arreglo hasta encontrar un 0. Entonces si no lo encuentra, se sigue y te imprime otras cosas.

Aun no es un código limpio y legible, pero esta mucho mejor que como estaba. No crees?.

El punto es que no necesitabas fors anidados.

Saludos