Ir ao conteúdo

Palindromos em C.


Maxstockler

Posts recomendados

Postado

Olá galera... Preciso de um programa que verifique se uma determinada palavra digitada pelo usuário é um PALINDROMO.

Palindromo são palavras que poder ser lidas pelos dois lados.

EX.: NATAN, ARARA.

O programa que desenvolvi abaixo, funciona perfeitamente, mas desde que seja apenas uma palavra.

Existem frases que são palindromos.

Ele também verifica mas desde que as palavras desta frase sejam digitadas sem os espaços.

#include <stdio.h>

#define MAX 1000

main()

{

char str1[MAX], str2[MAX];

int tam, i, j;

printf("\nDigite uma palavra (ou uma frase): ");

gets(str1);

tam = strlen(str1);

for (i=tam-1,j=0;i>=0;i--,j++)

str2[j] = str1;

str2[tam] = '\0';

// saida alternativa

/* for (i=tam-1;i>=0;i--)

str2[tam-i-1] = str1; */

if (strcmpi(str1,str2) == 0)

printf("\ palindromo!!");

else

printf("\nNao é palindromo!!");

system("PAUSE>nul");

}

Como eu devo proceder para que o usuário possa digitar a frase de modo normal utilizando os espaços e o programa realize a verificação....?

Aguardo respostas.

Obrigado.

Postado

Eu não programo em C, mas, não teria uma função que retire os espaços da variável? Assim deixaria ela só o texto, mas o usuário a veria normalmente

Postado

Não sei se existe uma função, em C, já pronta para isso, mais você pode fazer na "raça" mesmo.

Veja abaixo.


#include <stdio.h>
#include <string.h>

int main()
{
int tam_str1, i, a = 0;
char str1[500], nova_str1[500];

printf("Digite uma frase: ");
gets(str1);

tam_str1 = strlen(str1);

for(i=0; i<tam_str1; i++)
{
if(str1[i] != ' ')
{
nova_str1[a] = str1[i];
a++;
}
}

printf("%s", nova_str1);

return 0;
}

Outra coisa, na biblioteca string.h existe a função strrev que faz exatamente isso que você quer, inverte as letras.

  • Membro VIP
Postado

Faça uma sequencia de "for's" e com 1 ou 2 ifs para procurar por '\0' q é quando o user digita o backspace...

Postado

primeiramente, achei muito bem feito o primeiro for hehe

for (i=tam-1,j=0;i>=0;i--,j++)

str2[j] = str1;

já programo em C tem algum tempo e nunca tinha visto algo do tipo :) bem conciso e claro. parabéns!

Quanto ao seu problema, sugiro que você modifique a string recebida, removendo qualquer caractere que não seja do alfabeto (espaços, pontuações...)

Sendo assim, você modificaria apenas o início do código... antes do for bonitão

int main(){

char strcomespaco[MAX],str1[MAX], str2[MAX];
int tamcomespaco,tam, i, j;

printf("\nDigite uma palavra (ou uma frase):\n\n");
gets(strcomespaco);

tamcomespaco = strlen(strcomespaco);

for(i=0,j=0;i<tamcomespaco;i++)
{
if(isalpha(strcomespaco[i]))
{
str1[j]=strcomespaco[i];
j++;
}
}

str1[j]='\0';

tam = strlen(str1);

for (i=tam-1,j=0;i>=0;i--,j++)
str2[j] = str1[i];

str2[tam] = '\0';

// saida alternativa
/* for (i=tam-1;i>=0;i--)
str2[tam-i-1] = str1[i]; */

if (strcmpi(str1,str2) == 0)
printf("\ palindromo!!");
else
printf("\nNao é palindromo!!");

system("PAUSE");
}

testei aqui e digitei a frase

"socorram-me! subi no onibus em marrocos!"

e deu como palíndromo =)

Ah! você pode encontrar informações sobre a isalpha() que usei em http://cppreference.com/stdstring/isalpha.html

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!