Ir ao conteúdo
  • Cadastre-se

C Não consigo comparar as strings


Giovanaf

Posts recomendados

Oi, estou com dificuldades no problema abaixo, gostaria da ajuda de vocês.

Um palíndromo é uma seqüência de caracteres que é lida da esquerda para a direita ou da direita para a esquerda. Por exemplo, cada um dos seguintes vetores  é um palíndromo: 1221,F5G5F, HANAH e TGAAGT. Escreva um algoritmo em linguagem C que leia uma string e determine se ele é ou não um palíndromo.

 

Meu código até agora (Se compilarem, verão que o código imprime a palavra lida de maneira inversa, meu problema é que não consigo compará-las e definir se é ou não um palíndromo):

 

#include <stdio.h>
#include <string.h>
int main () {
char string [20], string2[20];
int num=0, t=0 ;

printf ("digite uma sequencia: ");
scanf ("%s", string);

while (string[num] != '\0') {
num++;}

printf ("ordem inversa: ");
for (int inv=num; inv>=0; inv--){
printf ("%c", string[inv]);
string [inv] = string2 [t];
t++;
}
string2 [t] =  '\0';
if (strcmp(string, string2) == 0){
	printf ("\né um palindromo");}
else {printf ("\nnao e um palindromo");}

}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Giovanaf Olá. Vê se é isso:

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

int main () {
    
    char string [20], invertida[20];
    int j = 0, i;
    char ch;

    printf ("digite uma sequencia: ");
    fgets(string, 20, stdin);
    strtok(string, "\n");
    if (strlen(string) == 20 - 1) {
        while ((ch = getchar()) != '\n' && ch != EOF);
    }

    printf ("ordem inversa: ");
    for (i = strlen(string) - 1; i >= 0; i--) {
        invertida[j] = string[i];
        j++;
    }
    invertida[j] =  '\0';
    
    printf("\n%s\n", invertida);
    
    if (!strcmp(string, invertida)) {
        printf ("\nC) um palindromo");
    } else {
        printf ("\nnao e um palindromo");
    }
}

O uso do fgets, do modo como está definido, é mais eficaz para ler uma string. 

no for que inverte a palavra tem o o seguinte: strlen(string) - 1. Esse -1 é para desconsiderar o '\n' no final da string

 

Mas, se preferir, faça uso dessa função:

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

E aí faça a leitura da string usando o scanf mesmo, chamando essa função logo em seguida:

printf ("digite uma sequencia: ");
scanf("%s", string);
limpa_linha();

Fica mais simples assim, caso não entender o lógica toda q coloquei no fgets 

Link para o comentário
Compartilhar em outros sites

@Giovanaf Seu exercício corrigido ficaria assim:

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

int main () {

    char string [20], string2[20];
    int t = 0 ;

    printf ("digite uma sequencia: ");
    scanf ("%s", string);

    printf ("ordem inversa: ");
    for (int inv = strlen(string) - 1; inv >= 0; inv--) {
        printf ("%c", string[inv]);
        string2[t] = string[inv];
        t++;
    }
    
    string2[t] = '\0';

    if (strcmp(string, string2) == 0) {
        printf ("\nE um palindromo");
    }
    else {
        printf ("\nNao e um palindromo");
    }
}

Obs: Mas não deixo de recomendar o uso da função mencionada acima, limpa_linha, para limpar o stdin.

Essa função é muito útil em projetos onde são feitas mais leituras do teclado, isso para q a "sujeira no buffer" não interfira nas leituras seguintes em seu código

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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