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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


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

Desconectado Desconectado

Mensajes: 62



Ver Perfil
palindromo
« en: 13 Julio 2012, 12:47 pm »

Hola,

Despues de conseguir, con ayuda, eliminar los espacios de un texto; me propongo saber si un texto es palindromo ( se lee igiual de izda a decha que al reves), he redactado lo que sigue, pero hay algun errorcillo que espero que me podais ayudar a detectar

Código
  1. #include <string.h>
  2. #include <ctype.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. int main()
  6.  
  7. {
  8.      char texto[30];
  9.      char copytexto[30];
  10.  
  11.  
  12.     int i, j;
  13.  
  14.     printf (" escribe la frase:");
  15.      gets( texto );
  16.  
  17.  
  18.  
  19.     // se copia esta frase en un nuevo arreglo sin espacios
  20.     for( i=0;i<strlen(texto);i++ )
  21.     {
  22.          if( texto[i] == ' ' )/* si hay un espacio*/
  23.          {
  24.              for( j = i+1 ; texto[j] !='\0' ; j++ )
  25.              {
  26.                   texto[j-1] = texto[j];
  27.              }
  28.  
  29.            texto[j-1] = '\0';
  30.          }  
  31.  
  32.     }
  33.       printf( "Sin espacios : %s\n" ,texto );
  34.  
  35.          /*strcpy (copytexto,texto);*/
  36.  
  37.           for (i=0;i<strlen (texto);i++)
  38.           {
  39.               for(j<strlen(texto);j=0;j--)
  40.  
  41.  
  42.                if (texto[i]=texto[j])
  43.  
  44.  
  45.               printf("es palindromo");
  46.  
  47.               else
  48.  
  49.               printf("no lo es");
  50.           }
  51.  
  52.  
  53.      system( "pause" );
  54. }

Muchas gracias


En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: palindromo
« Respuesta #1 en: 13 Julio 2012, 12:59 pm »

Muy util cuando llegue a casa lo miro.

Thanks


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: palindromo
« Respuesta #2 en: 13 Julio 2012, 13:10 pm »

He editado un poco tu código de manera que lo que hace es que al texto sin espacios , lo copio a copytexto y a copytexto lo invierto , después comparo las dos cadenas y si son iguales , el texto es palíndromo  ;-) ¡Gracias por el aporte!
PD: Para ver la salida que el programa produce no es necesario llamar al sistema , puedes hacer lo mismo con printf + getchar.
Código
  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. void invertir_cadena(char *cadena);
  5. int main()
  6.  
  7. {
  8.      char texto[30];
  9.      char copytexto[30];
  10.  
  11.  
  12.     int i, j;
  13.  
  14.     printf (" escribe la frase:");
  15.     gets( texto );
  16.     for( i=0;i<strlen(texto);i++ )
  17.     {
  18.          if( texto[i] == ' ' )/* si hay un espacio*/
  19.          {
  20.              for( j = i+1 ; texto[j] !='\0' ; j++ )
  21.              {
  22.                   texto[j-1] = texto[j];
  23.              }
  24.  
  25.            texto[j-1] = '\0';
  26.          }
  27.  
  28.     }
  29.     strcpy (copytexto,texto);
  30.     invertir_cadena(copytexto);
  31.    printf( "Sin espacios : %s\n" ,texto );
  32.  
  33.    if (strcmp(texto,copytexto)==0)
  34.    printf("Es palindromo\n");
  35.    else
  36.    printf("No es palindromo\n");
  37.    printf("Presione una tecla para continuar . . .");
  38.    getchar();
  39.    return 0;
  40. }
  41. void invertir_cadena(char *cadena)
  42. {
  43.    char *p_f_cadena=cadena+strlen(cadena)-1;
  44.    char save=0;
  45.  
  46.    for(int i = 0; cadena+i<=p_f_cadena; ++i)
  47.    {
  48.        save=*(cadena+i);
  49.        *(cadena+i)=*p_f_cadena;
  50.  
  51.        *p_f_cadena=save;
  52.        --p_f_cadena;
  53.    }
  54. }
  55.  
En línea

Regístrate en
ALONSOQ

Desconectado Desconectado

Mensajes: 62



Ver Perfil
Re: palindromo
« Respuesta #3 en: 13 Julio 2012, 15:51 pm »

Muchas gracias,

voy a mirarlo tranquilamente para tratar de entender lo que has escrito

saludos
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: palindromo
« Respuesta #4 en: 13 Julio 2012, 17:39 pm »

Hola! no es mas facil tener dos indices, uno al inicio y otro al final del arreglo, para ir comparando letra por letra?? algo asi:

Código
  1. for(i=0,j=strlen(texto)-1; i!=j; i++,j-- )
  2.  if(texto[i]==texto[j])
  3.    "es palindromo"

Saludos
En línea

Ahorrate una pregunta, lee el man
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: palindromo
« Respuesta #5 en: 13 Julio 2012, 18:42 pm »

Código
  1. for(i=0,j=strlen(texto)-1; i!=j; i++,j-- )
  2.  if(texto[i]==texto[j])
  3.    "es palindromo"

Solo estas comparando pares de letras, no todo el texto que pueda recivir.

Aqui tienes otra funcion:
Código
  1. #include <math.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int palindromo(char *texto) /* texto no puede tener espacios en blanco */
  6. {
  7.    int longitud = strlen(texto),i;
  8.  
  9.    for(i = 0 ; i < longitud / 2 ; i++)
  10.        if(pow((rand() % 100) + 2 , texto[i] - texto[longitud - i - 1]) - 1)
  11.            return sin(acos(1));
  12.  
  13.    return cos(log(1));
  14. }
  15.  

XD

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: palindromo
« Respuesta #6 en: 13 Julio 2012, 19:41 pm »

estoy de acuerdo con durasno, veo mas sencillo recorrer el texto comparando 2 indices que empiezan al principio y al final, y se recorren hasta llegar a la mitad de la cadena. dejo aqui mi codigo, lo he probado y funciona:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define SIZE 256
  5.  
  6. int main(int argc, char** argv)
  7. {
  8. char buffer[SIZE];
  9. int i, j, cond=1;
  10.  
  11. printf("Introduzca la frase: ");
  12. fgets(buffer, SIZE-1, stdin);
  13. buffer[strlen(buffer)-1]='\0';
  14.  
  15. //eliminar espacios en blanco
  16. for (i=0; i<strlen(buffer)-1; i++) {
  17. if (buffer[i] == ' ') {
  18. for (j=i; j<strlen(buffer)-1; j++) {
  19. buffer[j]=buffer[j+1];
  20. }
  21. buffer[strlen(buffer)-1]='\0';
  22. }
  23. }
  24. printf("La frase sin espacios es: %s\n", buffer);
  25.  
  26. //comprobar si es palindromo
  27. for (i=0; i<strlen(buffer)/2 && cond==1; i++) {
  28. if (buffer[i] != buffer[strlen(buffer)-i-1]) {
  29. cond=0;
  30. }
  31. }
  32.  
  33. if (cond == 1) {
  34. printf("Es palindromo.\n");
  35. } else {
  36. printf("No es palindromo.\n");
  37. }
  38.  
  39. return 0;
  40. }
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: palindromo
« Respuesta #7 en: 14 Julio 2012, 00:22 am »

Exacto yo me referia a esto:
Código
  1. for (i=0; i<strlen(buffer)/2 && cond==1; i++) {
  2. if (buffer[i] != buffer[strlen(buffer)-i-1]) {
  3. cond=0;
  4. }
  5. }
Igual me parece innecesario eliminar los espacios


Saludos
En línea

Ahorrate una pregunta, lee el man
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: palindromo
« Respuesta #8 en: 14 Julio 2012, 03:53 am »

Igual me parece innecesario eliminar los espacios

Si no eliminases los espacios, oraciones como "dabale arroz a la zorra el abad" no se cosiderarian palindromos, siendo que si se consideran como tal... o tampoco seria un palindromo el famoso "a man a plan a canal panama", que incluso hay programadores que han trabajado con este ultimo para extenderlo todo lo posible.

Todo depende de la "pureza" que quieras darle a un palindromo...

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: palindromo
« Respuesta #9 en: 14 Julio 2012, 05:30 am »

Lo acabo de hacer recien en el comentario y no lo probe, fijate si anda.

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. string str, str2;
  10. cin >> str;
  11.  
  12. size_t pos = str.find_first_of(" ");
  13. while(pos != string::npos){
  14. str.erase(pos);
  15. pos = str.find_first_of(" ");
  16. }
  17.  
  18. str2 = str.substr(0, str.length());
  19. reverse(str.begin(), str.end());
  20.  
  21. if(str2 == str)
  22. cout << "La frase '"<<str<<"' es palindroma." <<endl;
  23. else
  24. cout << "La frase '"<<str<<"' no es palindroma." <<endl;
  25.  
  26. system("pause");
  27.        return EXIT_SUCCESS;
  28. }
En línea

Odio los tipos de variable de Windows.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Palindromo con Pilas
Programación C/C++
Muffin 1 14,905 Último mensaje 28 Enero 2011, 02:32 am
por ricardo_b
Duda funcion palindromo
Programación C/C++
cazagavilan 2 3,039 Último mensaje 9 Abril 2012, 16:07 pm
por cazagavilan
vector simetrico (palíndromo)
Programación C/C++
indict 3 5,674 Último mensaje 16 Diciembre 2012, 22:39 pm
por bemone
Palindromo en un archivo
Programación C/C++
Eva93 8 4,496 Último mensaje 30 Agosto 2013, 13:20 pm
por Eva93
Decir si un vector es palindromo o no
Programación C/C++
sora_ori 3 7,979 Último mensaje 16 Diciembre 2013, 13:35 pm
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines