Testador de palíndromos. Escreva um programa que use uma pilha para determinar se uma string é um palíndromo (ou seja, se ela é escrita de forma idêntica de trás para a frente e de frente para trás). O programa deverá

ignorar os espaços e os sinais de pontuação.

Passo 1

Fala galera, tudo tranquilo? Esse código vamos fazer uso de alguns elementos e funções. O exemplo do livro é gigante então, precisa ir verificando bem como escrever somente o que você quer para o seu código. Para começar, definimos o tamanho da pilha com #define MAX 100 e o tipo da pilha com typedef. Escolhi typedef palíndromo. Lembrete: Esse código você deve usar alé do cabeçalho padrão “#include”, usar também “#include” pois estamos trabalhando com strings e não inteiros.

Agora vamos com as variáveis e ponteiros

palindromo palind[MAX];

int top = -1; /*topo da pilha*/

seguindo sequência vamos inserir os protótipos

void pop( palindromo * ); /*para remover*/

void push( palindromo ); /*para adicionar*/

E depois damos início a função main como de costume.

Passo 2

int main(void)

{

char palavraOriginal[MAX], palavraInvertida[MAX];

int i, tamanho;

Onde aqui estamos com a entrada de uma palavra original e a sua inversa com o máximo de caracteres que que estimamos. Com isso vc abre um printf pedindo para inserir uma palavra, logo após você verificar com scanf.

Uma parte importante é você determinar como será feita essa inversão ao inserir a palavra na pilha:

tamanho = strlen( palavraOriginal ); /* strlen pe encarregado de fazer a leituras doscaracteres de string inseridos*/

for( i = 0; i

push( palavraOriginal[i] );

/* tira palavra da pilha, agora invertida */

for( i = 0; i

pop( &palavraInvertida[i] );

Dada a variável inteira i que é o nosso contador que tem que estar associado ao tamanho usando o push para inserir e o pop para remover palavras da pilha.

Então verificamos a palavra original e invertida

/* checa se as duas strings são iguais */

if( !strcmp( palavraOriginal, palavraInvertida) )

printf("\nResultado: Confere, palindromo existente\n\n");

else

printf("\nResultado: Nao confere\n\n");

return 0 ;

Irei por o código abaixo para vocês!

. É isso galera, espero ter ajudado e vamos para mais um exercício. Valeu!

Resposta

//pilha string palindromo

#include

#include

#include

#define MAX 100 // mudar tamanho da pilha

typedef char palindromo; // mudar o tipo de pilha

palindromo palind[MAX];

int top = -1; //topo da lista

/* protótipos de funções */

void pop( palindromo * );

void push( palindromo );

/* iniciando a função main */

int main(void)

{

char palavraOriginal[MAX], palavraInvertida[MAX];

int i, tamanho;

printf("\n=== Checar existencia de palindromo ===\n\n Entre com a palavra a ser checada \n(sem caracteres especiais e sem espacos) \n\nPalavra: ");

scanf("%s", palavraOriginal);

/* add palavra na pilha na pilha */

tamanho = strlen( palavraOriginal );

for( i = 0; i

push( palavraOriginal[i] );

/* tira palavra da pilha, agora invertida */

for( i = 0; i

pop( &palavraInvertida[i] );

/* mostra palavra invertida */

printf("Palavra Invertida: %s", palavraInvertida);

//// checa se as duas strings sao iguais ////

if( !strcmp( palavraOriginal, palavraInvertida) )

printf("\nResultado: Confere, palindromo existente\n\n");

else

printf("\nResultado: Nao confere\n\n");

return 0 ;

} // fim main

void pop( palindromo *elemento ) /* remove elemento da pilha */

{

if( top == -1 ) // pilha vazia

printf("\npilha vazia\n");

else {

*elemento = palind[top];

top--;

}

} // fim função

void push( palindromo elemento ) /* add elemento na pilha */

{

if( top == MAX ) // pilha cheia

printf("\npilha cheia\n");

else {

top++;

palind[top] = elemento;

}

} // fim função