Ir para conteúdo

Arquivado

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

EDSONKOMBAT

[Resolvido] Descobrir se uma string é um Palíndromo.

Recommended Posts

Bom Dia Pessoal.
Gostaria de uma ajuda estou implementando um programa que verifica se um palavra digitada pelo usuário é um palíndromo(Palavras ou numeros que são iguais mesmo sendo lidos de trás para frente) exibindo uma mensagem de verificação. Ainda tem que considerar palavras com quantidades de caracteres par ou impar . Não entendi essa parte de considerar par ou impar até agora estou parado no codigo está assim :

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Verifica se uma string é um Políndromo.
int main()
{
int i = 0, cont = 0, j = 0;
char dados[50], invertido[50];
printf("Digite a sequ%cncia:\n\n", 136);
gets(dados);
while (dados[i] != '\0')
{
cont++;
i++;
}
printf("\n\nOrdem inversa:\n\n");
for(i = cont; i >= 0; i--)
{
if (dados[i] != '\0')
{
printf("%c", dados[i]);
invertido[j] = dados[i];
j++;
}  
}
invertido [j] = '\0';
if(strcmp(dados, invertido) == 0)
{
printf("\n\nPal%cndromo!\n\n", 161);
}
else
{
printf("\n\nN%co %c um pal%cndromo!\n\n", 198, 130, 161);
}
printf("\n\n"); 
system("pause");
return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

EDSONKOMBAT,

 

Basta fazer comparações.

for( int i = 0; i < strlen(dados); i++) {
      if(dados[i] != dados[cont])
           break;
}

Neste laço acima, se um dos caracteres da string forem diferentes sai do laço de repetição.

 

OBS.: Quando postar seus códigos, utilize a tag code. Facilita na visualização e ajuda dos outros usuários do fórum.

 

Espero ter ajudado, FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <string.h>

int ispal (const char* s) {
  const char* ps = s + strlen(s) - 1;
  while(s < ps)
    if(*s++ != *ps--)
      return 0;

  return 1;
}

int main (int argc, char** argv) {
  const char* const s_Bool[] = {"false", "true"};
  printf("true\ttrue\tfalse\tfalse\n%s\t%s\t%s\t%s\n", 
          s_Bool[ispal("1234321")], s_Bool[ispal("12321")],
          s_Bool[ispal("1234210")], s_Bool[ispal("12312")]);
  return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, existe diversas formas de executar essa tarefa. O algoritmo mais simples é este:

 

 

main(){
       
       char palavra [256];
       int fim, inicio, tamanho, palindromo=1;
      
       gets(palavra);
       
       /*ANALISA O TAMANHO DA PALAVRA*/     
       for (tamanho=0; palavra[tamanho] != '\0'; tamanho++);
       
       /*PERCORRE DO INICIO PARA O FIM AO MESMO TEMPO FAZ O PERCURSO INVERSO*/
       for (inicio=0, fim=tamanho-1; fim>0 && palavra[inicio] != '\0'; inicio++, fim--){
           
           /*ANALISA A 1ª POSIÇÃO COM A ULTIMA POSIÇÃO DA PALAVRA, DE ACRODO C O TAMANHO*/    
           if (palavra[fim] != palavra[inicio])
              palindromo=0; /*SE A CONDIÇÃO ACIMA FOR VERDADE, INVALIDA -> PALINDROMO*/
              break;
       }
       
       if (palindromo)/*SE A CONDIÇÃO DO PALINDRO FOR VERDADE ( = 1 )*/
          puts("a string eh um palindromo");
       
       else /*SE A CONDIÇÃO DO PALINDRO FOR FALSA ( = 0 )*/
           puts("a string NAO eh um palindromo");
           
       system("pause>nul");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Bom Dia Pessoal.

Gostaria de uma ajuda estou implementando um programa que verifica se um palavra digitada pelo usuário é um palíndromo(Palavras ou numeros que são iguais mesmo sendo lidos de trás para frente) exibindo uma mensagem de verificação. Ainda tem que considerar palavras com quantidades de caracteres par ou impar . Não entendi essa parte de considerar par ou impar até agora estou parado no codigo está assim :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Verifica se uma string é um Políndromo.
int main()
{
int i = 0, cont = 0, j = 0;
char dados[50], invertido[50];
printf("Digite a sequ%cncia:\n\n", 136);
gets(dados);
while (dados[i] != '\0')
{
cont++;
i++;
}
printf("\n\nOrdem inversa:\n\n");
for(i = cont; i >= 0; i--)
{
if (dados[i] != '\0')
{
printf("%c", dados[i]);
invertido[j] = dados[i];
j++;
}  
}
invertido [j] = '\0';
if(strcmp(dados, invertido) == 0)
{
printf("\n\nPal%cndromo!\n\n", 161);
}
else
{
printf("\n\nN%co %c um pal%cndromo!\n\n", 198, 130, 161);
}
printf("\n\n"); 
system("pause");
return(0);
}

porque colocou o 161 depois da virgula? o que significa este numero e por o que posso trocar?

printf("\n\nPal%cndromo!\n\n", 161);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui está um exemplo, o mais simples possível. Verifica se uma palavra é ou não palindromo

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

void main(){
	int j,flag=0; //inicia  flag com 0;
	char word[20];
	
	printf("Informe uma palavra: ");
	scanf("%s",word);
	printf("Contrario: ");
	for(j=strlen(word); j>=0; j--){
			printf("%c",word[j]);
			if((word[strlen(word)-1]==word[0]) && (word[strlen(word)-2]==word[1]))
				flag++; //Se a condição for confirmada, flag passa a valer 1; 
	}
	printf("\n\n");		
	if(flag!=0)
		printf("PALINDROMO\n\n");
	else
		printf("NAO PALINDROMO\n\n");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.