Codifica en Ansi C un programa que realice lo siguiente:
- 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???
Lo siento, está un poco largo.. espero que puedan ayudarme!! Llevo mucho tiempo haciendo esto >.<
- 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 [Seleccionar]
#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 >.<