Autor
|
Tema: palindromo (Leído 12,672 veces)
|
ALONSOQ
Desconectado
Mensajes: 62
|
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 #include <string.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> int main() { char texto[30]; char copytexto[30]; int i, j; printf (" escribe la frase:"); // se copia esta frase en un nuevo arreglo sin espacios for( i=0;i<strlen(texto);i++ ) { if( texto[i] == ' ' )/* si hay un espacio*/ { for( j = i+1 ; texto[j] !='\0' ; j++ ) { texto[j-1] = texto[j]; } texto[j-1] = '\0'; } } printf( "Sin espacios : %s\n" ,texto ); /*strcpy (copytexto,texto);*/ for (i=0;i<strlen (texto);i++) { for(j<strlen(texto);j=0;j--) if (texto[i]=texto[j]) else } }
Muchas gracias
|
|
|
En línea
|
|
|
|
Stakewinner00
|
Muy util cuando llegue a casa lo miro.
Thanks
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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. #include <string.h> #include <stdio.h> void invertir_cadena(char *cadena); int main() { char texto[30]; char copytexto[30]; int i, j; printf (" escribe la frase:"); for( i=0;i<strlen(texto);i++ ) { if( texto[i] == ' ' )/* si hay un espacio*/ { for( j = i+1 ; texto[j] !='\0' ; j++ ) { texto[j-1] = texto[j]; } texto[j-1] = '\0'; } } invertir_cadena(copytexto); printf( "Sin espacios : %s\n" ,texto ); if (strcmp(texto ,copytexto )==0) else printf("Presione una tecla para continuar . . ."); return 0; } void invertir_cadena(char *cadena) { char *p_f_cadena =cadena +strlen(cadena )-1; char save=0; for(int i = 0; cadena+i<=p_f_cadena; ++i) { save=*(cadena+i); *(cadena+i)=*p_f_cadena; *p_f_cadena=save; --p_f_cadena; } }
|
|
|
En línea
|
Regístrate en
|
|
|
ALONSOQ
Desconectado
Mensajes: 62
|
Muchas gracias,
voy a mirarlo tranquilamente para tratar de entender lo que has escrito
saludos
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
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: for(i =0,j =strlen(texto )-1; i !=j ; i ++,j -- ) if(texto[i]==texto[j]) "es palindromo"
Saludos
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
for(i =0,j =strlen(texto )-1; i !=j ; i ++,j -- ) if(texto[i]==texto[j]) "es palindromo"
Solo estas comparando pares de letras, no todo el texto que pueda recivir. Aqui tienes otra funcion: #include <math.h> #include <stdlib.h> #include <string.h> int palindromo(char *texto) /* texto no puede tener espacios en blanco */ { int longitud = strlen(texto ),i ; for(i = 0 ; i < longitud / 2 ; i++) if(pow((rand() % 100) + 2 , texto [i ] - texto [longitud - i - 1]) - 1) }
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
Mensajes: 438
|
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: #include <stdio.h> #include <string.h> #define SIZE 256 int main(int argc, char** argv) { char buffer[SIZE]; int i, j, cond=1; printf("Introduzca la frase: "); fgets(buffer , SIZE -1, stdin ); buffer [strlen(buffer )-1]='\0'; //eliminar espacios en blanco for (i=0; i<strlen(buffer)-1; i++) { if (buffer[i] == ' ') { for (j=i; j<strlen(buffer)-1; j++) { buffer[j]=buffer[j+1]; } buffer [strlen(buffer )-1]='\0'; } } printf("La frase sin espacios es: %s\n", buffer ); //comprobar si es palindromo for (i=0; i<strlen(buffer)/2 && cond==1; i++) { if (buffer [i ] != buffer [strlen(buffer )-i -1]) { cond=0; } } if (cond == 1) { } else { printf("No es palindromo.\n"); } return 0; }
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
Exacto yo me referia a esto: for (i=0; i<strlen(buffer)/2 && cond==1; i++) { if (buffer [i ] != buffer [strlen(buffer )-i -1]) { cond=0; } }
Igual me parece innecesario eliminar los espacios Saludos
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
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
Mensajes: 74
|
Lo acabo de hacer recien en el comentario y no lo probe, fijate si anda. #include <iostream> #include <string> #include <algorithm> using namespace std; int main(int argc, char *argv[]) { string str, str2; cin >> str; size_t pos = str.find_first_of(" "); while(pos != string::npos){ str.erase(pos); pos = str.find_first_of(" "); } str2 = str.substr(0, str.length()); reverse(str.begin(), str.end()); if(str2 == str) cout << "La frase '"<<str<<"' es palindroma." <<endl; else cout << "La frase '"<<str<<"' no es palindroma." <<endl; system("pause"); return EXIT_SUCCESS; }
|
|
|
En línea
|
Odio los tipos de variable de Windows.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Palindromo con Pilas
Programación C/C++
|
Muffin
|
1
|
14,851
|
28 Enero 2011, 02:32 am
por ricardo_b
|
|
|
Duda funcion palindromo
Programación C/C++
|
cazagavilan
|
2
|
3,000
|
9 Abril 2012, 16:07 pm
por cazagavilan
|
|
|
vector simetrico (palíndromo)
Programación C/C++
|
indict
|
3
|
5,618
|
16 Diciembre 2012, 22:39 pm
por bemone
|
|
|
Palindromo en un archivo
Programación C/C++
|
Eva93
|
8
|
4,440
|
30 Agosto 2013, 13:20 pm
por Eva93
|
|
|
Decir si un vector es palindromo o no
Programación C/C++
|
sora_ori
|
3
|
7,932
|
16 Diciembre 2013, 13:35 pm
por leosansan
|
|