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
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