Ir ao conteúdo

Posts recomendados

Postado

"Faça um programa que lê uma string e imprime a sua inversa. O protótipo da função deve ser: void inverte(char *str)."

Esse é o exercício, abaixo o que já fiz.


void inverte (char *str)
{
char d[100],c[100];
int a,b=0;
for(a=strlen(c)-1;a>=0;a--)
{
d[b]=c[a];
b++;
}
d[b]='\0';
puts(d);
}

int main (void)
{
char s[100];
gets[s];
inverte[&s];
getch();
}

A principio, iria fazer a string c receber os valores indicados pelo ponteiro, mas não coloque no código porque tentei de diversas maneiras, e nenhuma deu certo. Eu preciso de duas strings na função "inverte"? Não teria como utilizar o ponteiro nas operações e apenas a string d para receber o inverso do que foi escrito?

  • Amei 1
  • 8 anos depois...
Postado

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

void InverteS(char *pont){
    printf("%c", *pont);
}


int main (){
    setlocale(LC_ALL,"");
    int tam;

    char *pont, s[200];

    printf("Digite uma palavra: ");
    scanf("%s", &s);

    tam = strlen(s);
    printf("\n Tamanho da palavra: %d\n", tam);

    pont = &s[tam];

    InverteS(pont);

    printf("A palavra de traz para frente é: ");
    while(tam >= 0){
        InverteS(pont);
        pont--;
        tam--;
    }

    printf("\n");
system("pause");
return 0;}
 

  • Amei 1
Postado
void inverte (char *str)
{
 char d[100],c[100];
 int  a,b=0;
 for(a=strlen(c)-1;a>=0;a--)
 {
  d[b]=c[a];
  b++;
 }
 d[b]='\0';
 puts(d);
}

 

@FelipeCorrêaNão precisa de tudo isso. É apenas uma função para imprimir a string ao contrário, dentro da própria função.

 

Entenda: em inverte() a string começa em str. Pode escrever como &str[0]. E vai até um zero, 0 mesmo, que é o que marca o fim de uma string em C.

 

Se str tiver 2 letras, em str[2] vai estar o zero e as letras estão lá em str[0] e str[1]. Então para mostrar ao contrário você quer mostrar apenas str[2] e str[1], nessa ordem.

 

Então se você seguir de str[0] em diante até achar o zero vai saber o endereço da ultima letra. E o da primeira é claro que você já sabe, porque sempre é str[0]. E aí um simples loop imprime as letras e você vai então fazer outras coisas... ;) 

 

 

13 minutos atrás, Yankarlos Dias disse:

while(tam >= 0){
        InverteS(pont);
        pont--;
        tam--;
    }

 

Não, você não pode chamar uma vez a função para cada letrinha. Você chama a função uma única vez para mostrar aa string invertida, @Yankarlos Dias

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