Ir ao conteúdo
  • Cadastre-se
Giovanaf

C Não consigo comparar as strings

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@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 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×