Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ALONSOQ en 6 Agosto 2012, 18:06 pm



Título: cadenas y funciones
Publicado por: ALONSOQ en 6 Agosto 2012, 18:06 pm
Hola he hecho este programa a base de dos funciones ( suprimir espacios , e invertir cadena) y finalmente copiando una cadena en otra y comparándolas trato de determinar si espalindromo, pero la última parte no me funciona; me podeis ayudar por favor?
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #include<ctype.h>
  6.  
  7. char  matriz[30];
  8. char matriz_alreves[30];
  9.  
  10. void suprimir_espacios (char m[]);
  11. void invertir_cadena (char c[]);
  12. void palindromo (char c[], char m[]);
  13. main()
  14. {
  15.  
  16. suprimir_espacios (matriz);
  17. strcpy (matriz_alreves, matriz);
  18. invertir_cadena (matriz_alreves);
  19. palindromo (matriz_alreves, matriz);
  20.  
  21.  
  22. }
  23.  
  24. void suprimir_espacios (char m[])
  25. {
  26.     int i, j;
  27.     printf("Dime un texto conespacios por favor:");
  28.     gets (m);
  29.  
  30.     for (i=0; i<strlen (m);i++)
  31.     {
  32.         m[i]= (tolower(m[i]));
  33.  
  34.         if (m[i]==' ')
  35.         {
  36.           for (j=i+1; m[j]!='\0'; j++)
  37.           {
  38.               m[j-1]=m[j];
  39.           }
  40.           m[j-1]='\0';
  41.         }
  42.  
  43.      }
  44.      printf("%s",m);
  45. }
  46. void invertir_cadena (char c[])
  47. {
  48.     int i, j;
  49.     char aux[30];
  50.     while (i>0)
  51.     aux[j++]=c[--i];
  52. }        
  53. void palindromo (char c[], char m[])
  54. {
  55. if (strcmp(c,m)==0)
  56.  
  57.    printf("Es palindromo\n");
  58.    else
  59.    printf("No es palindromo\n");
  60.  
  61. }


Título: Re: cadenas y funciones
Publicado por: X3R4CK3R en 6 Agosto 2012, 18:38 pm
Código
  1. void invertir_cadena (char c[])
  2. {
  3.     int i;
  4.     while (i>0)
  5.     c[--i];
  6. }  

La función no hace nada útil, digamos que es solo lectura, el bucle va leyendo el caracter desde el final hasta el principio sin hacer ningún cambio.

Tendrías que usar una variable auxiliar donde almacenar la cadena original invertida
Código
  1. aux[j++]=c[i--] // Donde j empieza desde 0 y aumenta, e i empieza desde c.lenght() y decrementa hasta 0

Saludos


Título: Re: cadenas y funciones
Publicado por: ALONSOQ en 6 Agosto 2012, 18:57 pm
Muchas gracias por tu ayuda, lo modifico en el programa original añadiendo lo que me dices, pero creo que no te entiendo bien. ¿  es a lo que te refieres? no funciona

gracias


Título: Re: cadenas y funciones
Publicado por: durasno en 7 Agosto 2012, 01:24 am
Hola! para q pienses:

1º es necesario el strcpy??
2º la cadena invertida se almacena en matriz_alreves??
3º si aux es un arreglo declarado en invertir_cadena(), es visible para todo el programa???


Saludos


Título: Re: cadenas y funciones
Publicado por: X3R4CK3R en 7 Agosto 2012, 15:05 pm
Muchas gracias por tu ayuda, lo modifico en el programa original añadiendo lo que me dices, pero creo que no te entiendo bien. ¿  es a lo que te refieres? no funciona

gracias

Claro que no funciona, como dice durasno:

para q pienses

Te he explicado el porqué no funciona tu función y te he ofrecido un hilo del que tirar para hacerla funcionar, en tus manos y cabeza queda que desarrolles el code.  ;)

Saludos