Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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
Postado (editado)

@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 

Editado por giu_d
corrigir comentário
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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

Editado por giu_d
corrigir comentário

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Obrigada pelas dicas e  correção.

  • Obrigado 1

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






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

×