20.11 Escriba un programa que utilice un objeto pila para determinar si una cadena es una palíndroma (es decir, que la cadena
se deletree en forma idéntica, tanto al revés como al derecho). El programa debe ignorar espacios y puntuación.
#include <iostream> using namespace std; struct nodo { char dato; struct nodo *sig; }; void inicializar(nodo **cab) { *cab = NULL; } void push(nodo **cab , char nuv) { nodo *q; q = new nodo; q->dato = nuv; if(*cab == NULL) { q->sig = *cab; *cab = q; } else { q->sig = *cab; *cab = q; } } char pop(nodo **cab) { nodo *aux; char num; aux = *cab; if(aux) { num = aux->dato; *cab = (*cab)->sig; delete aux; return num; } else { return 0; } } int comparar(nodo *cab, nodo *cab2 , int n) { int b = 1; for(int i=0;i<n;i++) { if(cab->dato == cab2->dato) { cab = cab->sig; cab2 = cab2->sig; } else b = 0; } return b; } void mostrar(nodo *cab) { while(cab) { cout<<cab->dato; cab = cab->sig; } cout<<"\n\n\n"; } int main() { nodo *cab , *cab2; inicializar(&cab); inicializar(&cab2); string palabra ="anita lava la.. tina"; //cout<<" ingresa palabra: "; //cin>>palabra; int cont=0; for(int i=(palabra.length()-1);i>=0;i--) { if(palabra[i] != ' ') { if(palabra[i] != '.') push(&cab , palabra[i]); else cont++; } else cont++; } for(int i=0;i<palabra.length();i++) { if(palabra[i] != ' ') { if(palabra[i] != '.') push(&cab2 , palabra[i]); else cont++; } else cont++; } cout<<comparar(cab , cab2, palabra.length()-cont)<<" '1 iguales , 0 diferentes' \n"; mostrar(cab2); mostrar(cab); system("pause"); return 0; }
No hay comentarios.:
Publicar un comentario