- Implemente las funciones push, pop y display para una pila dinámica (utiizando listas enlazadas) de caracteres.
- Utilizando las funciones anteriores, el programa debe ser capaz de decir si una cadena de caracteres tecleada por el usuario es palíndrome o no (es palíndrome si se lee igual de izquierda a derecha que de derecha a izquierda).
--------------------------------------------------------------
Ya tengo prácticamente el programa pero no me detecta todos los palindromes, algunos me dice que no son cuando si son en que estoy mal???
Código:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
struct Pila
{
char dato;
struct Pila *Sig;
};
typedef struct Pila *Ap;
void push(Ap*, char);
void display(Ap);
char pop(Ap*);
void Palindromo();
void vGotoxy (int, int);
int main()
{
Ap top;
int opc;
top = NULL;
char palabra[30];
do
{
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
vGotoxy(40-strlen("Pilas\n\n")/2,2);
printf("Pilas\n\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 13);
printf("\n\n\n\t1. Introducir un palindromo \n\t2. Salir \n\n\n\t\t\tOpcion: ");
opc = getchar();
switch(opc)
{
case '1':
system("cls");
Palindromo();
break;
case '2':
system("cls");
vGotoxy(40-strlen("Adeu!!")/2,10);
printf("Adeu!!");
break;
}
}while(opc!='2');
getch();
return 0;
}
void Palindromo()
{
char frase[30], invert[30], letra[20];
int j = 0;
Ap Tope;
Tope = NULL;
fflush(stdin);
printf("Escriba un palindromo: \n");
gets(frase);
for(int i=0; i<strlen(frase); i++)
{
if(frase[i] != 32)
{
letra[j] = frase[i];
push(&Tope, frase[i]);
j++;
}
}
display(Tope);
for(int k = 0; k<j; k++)
{
invert[k] = pop(&Tope);
}
if(strncmp (letra,invert,strlen(invert)) == 0) //strncmp (letra,invert,strlen(invert)) == 0 || strcmp(letra, invert) == 0
printf("Si es un palindromo\n");
else
printf("No es un palindromo\n");
getch();
}
void push(Ap *Tope, char pLetra)
{
struct Pila *x;
x = new struct Pila;
x->dato = pLetra;
x->Sig = *Tope;
*Tope = x;
}
void display(Ap Tope)
{
int i = 0;
struct Pila *temp;
temp = Tope;
while(temp!=NULL)
{
printf("Letra %d: %c\n", i++, temp->dato);
temp = temp->Sig;
}
}
char pop(Ap *Tope)
{
char a;
if(*Tope == NULL)
{
printf("PILA VACIA...");
return 0;
}
else
{
a = (*Tope)->dato;
*Tope = (*Tope)->Sig;
return (a);
}
}
void vGotoxy (int posx, int posy) // Función para centrar en pantalla
{
HANDLE hConsole=GetStdHandle (STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE !=hConsole) {
COORD pos={posx,posy};
SetConsoleCursorPosition (hConsole,pos);
}
}
Lo siento, está un poco largo.. espero que puedan ayudarme!! Llevo mucho tiempo haciendo esto >.<