Ir ao conteúdo
  • Cadastre-se

C /*1. Faça um programa que lê três palavras do teclado e imprime as três palavras


Posts recomendados

/*Olá galera! Preciso de ajuda. Preciso inverter a ordem das letras de palavras(string), mas o código está invertendo a ordem das palavras, não as letras...o que fazer? 

 

1. Faça um programa que lê três palavras do teclado e imprime as três palavras na ordem inversa.*/

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

int main(){
    setlocale(LC_ALL,"Portuguese_Brazil");
    
    int i, j;
    char palavra[3][20];
    
    for(i=0;i<3;i++){
        printf("\nDigite a %dª palavra: ",i+1 );
        scanf("%s",&palavra);
        fflush(stdin);
    }
    printf("Agora veja essas palavras ao contrário:");
        for(i=3;i>=0;i--){
            printf("\n %s",palavra);
        
}
return 0;}

Link para o comentário
Compartilhar em outros sites

Basta imprimi-las de trás para frente. Por exemplo:

//Precisa incluir a biblioteca string.h
#include <string.h>

//...
for(j = strlen(palavra[i])-1; j >= 0; j--)
	printf("%c", palavra[i][j]);

Com strlen você obtém o tamanho da string, e, na inicialização da variável, você reduz 1, para não acessar posição de memória indesejada.

 

Fica como dica o seguinte: coloque seu código na tag code <>, porque quando você apenas cola o código, ele é modificado por causa do conflito com algumas tags. Por isso o dos vetores sumiu na postagem.

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

@Joice Mara Zanini Olá. Como já pode ver foi apresentada um forma de resolver o exercício pelo @iHollyZinhO

Vou arriscar também te passar duas funções para inverter as strings, mas o importante é entender bem a lógica da função q achar mais fácil usar, ok?

Segue o código:

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

void inverte_string(char *s) {

    int i, j, c;

    for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

void imprime_invertida(char *the_string) {

    int i, j;
    char invertida[50];

    j = 0;

    for (i = strlen(the_string) - 1; i >= 0; i--) {
        invertida[j++] = the_string[i];
    }
    invertida[j] = '\0';

    printf("%s\n", invertida);
}

void limpa_linha() { // função para limpar o stdin subtituindo o fflush(stdin);
    scanf("%*[^\n]");
    scanf("%*c");
}

int main() {

    setlocale(LC_ALL,"Portuguese_Brazil");

    int i, j;
    char palavra[3][20];

    for (i = 0; i < 3; i++) {
        printf("\nDigite a %dª palavra: ",i+1 );
        scanf("%s", palavra[i]);
        limpa_linha();
    }

    // função 1
    //for (i = 0; i < 3; i++) {
    //    inverte_string(palavra[i]);
    //}

    printf("\nAgora veja essas palavras ao contrário:\n\n");

    // função 2

    for (i = 0; i < 3; i++) {
        imprime_invertida(palavra[i]);
    }

    //for (i = 0; i < 3; i++)
    //printf("%s\n", palavra[i]);

    return 0;
}

Vê se deu para entender bem a lógica usada. Não fique de forma alguma fazendo exercícios na base do copia/cola senão você não aprende nada! :thumbsup:

Link para o comentário
Compartilhar em outros sites

valeu galera! vou estudar melhor a parte de string

adicionado 4 minutos depois
49 minutos atrás, giu_d disse:

@Joice Mara Zanini Olá. Como já pode ver foi apresentada um forma de resolver o exercício pelo @iHollyZinhO

Vou arriscar também te passar duas funções para inverter as strings, mas o importante é entender bem a lógica da função q achar mais fácil usar, ok?

Segue o código:


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

void inverte_string(char *s) {

    int i, j, c;

    for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

void imprime_invertida(char *the_string) {

    int i, j;
    char invertida[50];

    j = 0;

    for (i = strlen(the_string) - 1; i >= 0; i--) {
        invertida[j++] = the_string[i];
    }
    invertida[j] = '\0';

    printf("%s\n", invertida);
}

void limpa_linha() { // função para limpar o stdin subtituindo o fflush(stdin);
    scanf("%*[^\n]");
    scanf("%*c");
}

int main() {

    setlocale(LC_ALL,"Portuguese_Brazil");

    int i, j;
    char palavra[3][20];

    for (i = 0; i < 3; i++) {
        printf("\nDigite a %dª palavra: ",i+1 );
        scanf("%s", palavra[i]);
        limpa_linha();
    }

    // função 1
    //for (i = 0; i < 3; i++) {
    //    inverte_string(palavra[i]);
    //}

    printf("\nAgora veja essas palavras ao contrário:\n\n");

    // função 2

    for (i = 0; i < 3; i++) {
        imprime_invertida(palavra[i]);
    }

    //for (i = 0; i < 3; i++)
    //printf("%s\n", palavra[i]);

    return 0;
}

Vê se deu para entender bem a lógica usada. Não fique de forma alguma fazendo exercícios na base do copia/cola senão você não aprende nada! :thumbsup:

legal, vou ver com calma aqui

adicionado 6 minutos depois
1 hora atrás, iHollyZinhO disse:

Basta imprimi-las de trás para frente. Por exemplo:


//Precisa incluir a biblioteca string.h
#include <string.h>

//...
for(j = strlen(palavra[i])-1; j >= 0; j--)
	printf("%c", palavra[i][j]);

Com strlen você obtém o tamanho da string, e, na inicialização da variável, você reduz 1, para não acessar posição de memória indesejada.

 

Fica como dica o seguinte: coloque seu código na tag code <>, porque quando você apenas cola o código, ele é modificado por causa do conflito com algumas tags. Por isso o dos vetores sumiu na postagem.

valeu! vou ver melhor

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

@PessoaQualquer Olá. Apenas para deixar mais simples a função inverte_string que coloquei acima para q consiga entender de maneira mais fácil, a mesma poderia ficar assim:

void inverte_string(char s[]) {

    int i, j, c;

    for (i = 0; i < strlen(s); i++) {
        for (j = 0; j < i; j++) {
            c = s[i];
            s[i] = s[j];
            s[j] = c;
        }
    }
}

Também gostaria q prestasse muita atenção com a função limpa_linha. Nós aqui do fórum não fazemos uso do comando fflush(stdin);. Já foi esclarecido aqui mesmo nesse fórum q essa função não é nem um pouco recomendada para limpar a "sujeira do buffer". Logo, recomendo fortemente q faça uso dessa função q passei acima e vou té repetir ela aqui:

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

Outra função q também é excelente para limpar a sujeira do buffer seria essa:

void fflush_stdin() {
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
}

Procure fazer uso de uma dessas funções acima e assim evitar o comando fflush(stdin); 

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, giu_d disse:

@PessoaQualquer Olá. Apenas para deixar mais simples a função inverte_string que coloquei acima para q consiga entender de maneira mais fácil, a mesma poderia ficar assim:


void inverte_string(char s[]) {

    int i, j, c;

    for (i = 0; i < strlen(s); i++) {
        for (j = 0; j < i; j++) {
            c = s[i];
            s[i] = s[j];
            s[j] = c;
        }
    }
}

Também gostaria q prestasse muita atenção com a função limpa_linha. Nós aqui do fórum não fazemos uso do comando fflush(stdin);. Já foi esclarecido aqui mesmo nesse fórum q essa função não é nem um pouco recomendada para limpar a "sujeira do buffer". Logo, recomendo fortemente q faça uso dessa função q passei acima e vou té repetir ela aqui:


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

Outra função q também é excelente para limpar a sujeira do buffer seria essa:


void fflush_stdin() {
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
}

Procure fazer uso de uma dessas funções acima e assim evitar o comando fflush(stdin); 

Obrigada! Antes de entrar no fórum só conhecia fflush(stdin); agora vou começar a estudar melhor novos comandos :)

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!