Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

String em c

Estou fazendo uma atividade num livro que pede pra eu dizer se uma palavra digitada é um palíndromo, que é uma palavra que é igual se lida da esquerda para a direita ou da direita para a esquerda, tal como ovo ou arara.

Eu escrevi um código que copia uma string para a outra invertendo-a, para depois compará-las, embora eu consiga, a comparação diz que são diferentes mesmo se forem iguais:




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


int main(int argc, char **argv)

{

int i,j;
char palavra1[20] = "Lucas";
char palavra2[20];




printf ("Escreva uma string: ");
scanf ("%s", palavra1);


int tamanho=strlen (palavra1);

for (i=0, j=tamanho-1;i<tamanho;i++,j--){

    palavra2[j]=palavra1[i];



    }
    palavra2[tamanho] = '\0';


    printf ("A palavra digitada foi %s e ela invertida é %s\n", palavra1, palavra2);

    if (palavra1==palavra2)

        puts ("É palíndromo");

    else
        puts ("Não é palíndromo");





    return 0;
}

Em que que eu to tô errando? Sei que estou quase lá!

8 respostas
solução!

Oi Lucas,

Parece algo bem simples, faz assim, da um printf cada vez que a palavra2 recebe um valor:

printf("Palavra 2 posição %d = %s", j, palavra2[j]);

Assim você vai poder ver o que está saindo em cada momento com a variável palavra2.

Espero ter digitado o código certo, faz tempo que não uso C e estou no celular, qualquer coisa me corrija, se tiver alguma dúvida posta o resultado aqui, que tento te ajudar.

Muito obrigado por tentar me ajudar, fiz o que vc disse. Varri a string letra por letra e comparei as 2 usando a palavra arara. Eram iguais! Não resolveu.

Sua dica me ajudou a fazer uma gambiarra maldita. Deu certo, mas não tá nada elegante:


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


int compara (char palavra1[30]);

int main(int argc, char **argv)

{

int i,j, teste=0;
char palavra1[20] = "Lucas";
char palavra2[20];




printf ("Escreva uma string: ");
scanf ("%s", palavra1);


int tamanho=strlen (palavra1);

for (i=0, j=tamanho-1;i<tamanho;i++,j--){

    palavra2[j]=palavra1[i];



    }
    palavra2[tamanho] = '\0';


    printf ("A palavra digitada foi %s e ela invertida é %s\n", palavra1, palavra2);

    printf ("Palavra 2 :\n");

    for (i=0;i<strlen(palavra2);i++)
        printf ("%c", palavra2[i]);

    putchar('\n');



    printf ("Palavra 1 :\n");

    for (i=0;i<strlen(palavra1);i++)
        printf ("%c", palavra1[i]);

    putchar('\n');


    for (i=0;i<strlen(palavra1);i++){

        if (palavra1[i]!=palavra2[i]){

            puts ("Não é mimimi");
            teste++;
            break;
            }  


        }

        if (teste==0)

        puts ("É mimimi");





    return 0;
}

No fim usei a função strcmp pra comparar e resolvi. Valeu. Sua dica ajudou.

Oi Lucas, eu ia falar dessa função agora, como eu disse eu estou um pouco enferrujado com C e acabei tendo que recorrer ao Google aqui.

Estava preparando uma solução para você mas como você já resolveu melhor ainda, se você quiser que eu poste aqui só falar, mas acho que ficará igual ao seu

Por favor, gostaria de olhar!

Ficou assim:

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


int main(int argc, char **argv)

{

int i,j;
//char palavra1[20] = "Lucas";
char palavra1[20] = "arara";
char palavra2[20];




printf ("Escreva uma string: ");
scanf ("%s", palavra1);


int tamanho=strlen (palavra1);

for (i=0, j=tamanho-1;i<tamanho;i++,j--){

    palavra2[j]=palavra1[i];



    }
    palavra2[tamanho] = '\0';


    printf ("A palavra digitada foi %s e ela invertida é %s\n", palavra1, palavra2);

    //if (palavra1==palavra2)
    if (strcmp(palavra1, palavra2)==0)
        puts ("É palíndromo");
    else
        puts ("Não é palíndromo");





    return 0;
}

Valeu, cara. As outras linguagens mais comerciais são tão tensas assim? Pq c e C++ quando chega em função é osso! Valeu!