Alan Vasconcelos Postado Agosto 6, 2014 Denunciar Share Postado Agosto 6, 2014 Pessoal é o seguinte estou tentando fazer um algoritmo para saber se uma string é palindromo ou não. meu código abaixo: #include <stdio.h> #include <stdlib.h> int main() { char nome1[50], nome2[50]; int i, tam1, cont=0; printf("Digite a frase: "); gets(nome1); tam1 = strlen(nome1); for(i=tam1-1;i>=0;i--){ if(nome1==' ') continue; else{ nome2[cont]=nome1; cont++; } } nome2[cont]='\0'; printf("%s\n",nome2); if(strcmp(nome1,nome2)==0) printf("palindromo.\n"); else printf("não palindromo.\n"); system("pause"); return 0; } na linha if(nome1==' ') está dando o seguinte erro: - warning: comparison between pointer and integer mais se eu troco as aspas ' ', por aspas duplas " ", esse erro desaparece. Aguem poderia me explicar o porque? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ScreenBlack Postado Agosto 6, 2014 Denunciar Share Postado Agosto 6, 2014 Aspas simples é utilizada para referenciar APENAS um carácter (exceto os especiais, como por exemplo, terminador de string - '\0'), pois indica uma conversão direta para um valor inteiro. Pode conferir a referência neste link. Aspas duplas referencia uma bloco de memórias e retorna a referência para a variável, e já contém o terminador de string. O vetor de char, utilizado no seu caso, é um ponteiro estático que referencia para uma área de memória. O valor desse ponteiro não pode ser alterado, mas o conteúdo da string sim - desde que não ultrapasse o tamanho pré-definido. Portanto, quando faz a comparação de um vetor com um conteúdo usando aspas simples, estará fazendo, internamente, uma comparação entre ponteiro e inteiro. Quando faz a comparação de um vetor com um conteúdo entre aspas duplas, estará fazendo comparação entre valores de referências (não é o conteúdo, em sí) de memória. Para saber se o conteúdo do vetor é um espaço, utilize assim: if ( strcmp( nome1, " " ) == 0 ) Ou então, valide direto pelo valor de retorno: if ( ! strcmp(nome1, " " ) ) // Retorno é zero quando conteúdos comparados forem iguais. Usando a exclamação, esse valor é invertido, transformando-se em um ("TRUE"), tornando o "if" válido. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alan Vasconcelos Postado Agosto 6, 2014 Autor Denunciar Share Postado Agosto 6, 2014 Obrigado pela ajuda amigo! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Alan Vasconcelos
Pessoal é o seguinte estou tentando fazer um algoritmo para saber se uma string é palindromo ou não.
meu código abaixo:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char nome1[50], nome2[50];
int i, tam1, cont=0;
printf("Digite a frase: ");
gets(nome1);
tam1 = strlen(nome1);
for(i=tam1-1;i>=0;i--){
if(nome1==' ')
continue;
else{
nome2[cont]=nome1;
cont++;
}
}
nome2[cont]='\0';
printf("%s\n",nome2);
if(strcmp(nome1,nome2)==0)
printf("palindromo.\n");
else
printf("não palindromo.\n");
system("pause");
return 0;
}
na linha if(nome1==' ') está dando o seguinte erro:
- warning: comparison between pointer and integer
mais se eu troco as aspas ' ', por aspas duplas " ", esse erro desaparece. Aguem poderia me explicar o porque?
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.