Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal!

 

Estou tentando fazer um código que imprima uma frase inversa ao que o usuário digitou, mas não estou conseguindo mostrar essa frase, o código só mostra a primeira palavra invertida e para.

 

Vocês sabem o que está errado?

 

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

int inversao(char *frase,int i){
  int j=0,k;
  char frase2[100];
  k=i-1;
  
  for(int l=0;l<=i-1;l++){
     frase2[l]=frase[k];
     k--;
  }
  frase2[i]= '\0';
  printf("\nA frase inversa é: ");
  
  while(frase2[j] != '\0'){
      printf("%c",frase2[j]);
      j++;
  }
  return 0;
}

int main(void){
  char palavra[100];
  printf("\nEscreva uma frase: ");
  scanf(" %s",palavra);
  inversao(palavra,strlen(palavra));
  return 0;
}

 

  • Amei 1
Postado

@donutLukke     pelo jeito você conhece pouco a linguagem c ,  e essa função "scanf"  ,   que desse modo como está ,  só pega mesmo uma palavra da frase , pois quando encontra um espaço em branco , ela termina de pegar o restante do que foi escrito ,  e então você pode usar outra função mais apropriada para  ler string's ,  que é "fgets"  , que pega todos os caracteres digitados e ainda pega também o newLine , que é a tecla "enter" , e assim é bom remover esse newLine , para que ao escrever não pule para a linha de baixo , 

#include<stdio.h>
#include<string.h>
int inversao( char *frase , int i )
{
  int j = 0 , l;
  char frase2[100];

  for( l=0; l<=i; l++ )
    frase2[ l ] = frase[ i - l ];

  frase2[ l ] = '\0';
  printf("\nA frase inversa eh --: ");

  while( frase2[ j ] != 0 )
  {
    printf("%c", frase2[ j ] );
    j++;
  }
  return 0;
}

int main(void){
  char palavras[100];
  printf("\nEscreva uma frase: ");
  
  fgets( palavras , sizeof( palavras ) , stdin );
  palavras[strlen(palavras)-1] = 0; /// remove o newLine

  inversao(palavras,strlen(palavras) - 1 );
  printf("\n\n\n");
  return 0;
}

 

  • Curtir 1
Postado

Se quer apenas mostrar a frase invertida na função, você imprimir cada letra no loop da última até a primeira, p.ex,

int inversao(char *frase, int i){
    printf("\nA frase inversa é: ");
    for(int n = i - 1; n >= 0; n -= 1){
        putchar(frase[n]);
    }
    return 0;
}

 

  • Curtir 1
  • Amei 1
  • 1 ano depois...
Postado

Bom dia!

 

                                                                                                              A Inversão

Iteração sobre vetor

 

                     Notei que, apesar de reconhecer que essas strings são terminadas

com null ('\0') zero, usou múltiplas notações: de vetores, ponteiro para char e/ou

arranjo, intercambialmente. Não sei se para exemplificar que é possível, ou se é

pura confusão. Por último, fez pouco caso dos recursos utilizáveis na função do

exercício (pressuponho) sua 'inversao'.

 

Testei o programa dela, e editei sua expessão.

Veja:

 

Com- dar-printf- em-uma-frase.c

/* Como dar "printf" em uma frase */

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

int inversao (char *s);

int main (void)
{
 char texto[100];
 printf ("Escreva uma frase [max. 99 caracteres]: ");
 scanf(" %99[^\n]",texto);
 int len= inversao (texto);
 if (len) 
   {
    printf ("%s%s%i%s",texto," => ",len," caractere");
    if (len>1) putchar ('s'); 
   }
 putchar ('\n');
}
int
inversao (char *s)
{
 if (NULL==s) return 0;
 char *s0= s;
 while (*++s)/* nul block */;
 int len= s - s0;
 while (s0<s)
   {
    char c= *--s;
    *s= *s0;
    *s0= c;
    ++s0;
   }
 return len;
}

c'11 - gcc'11.4

c'17 - Pelles C'12.0

 

Algo assim, inicialmente, já me satisfaz.

Se o momento é dos ponteiros, então

NÃO PENSE D+, fique com os ponteiros.

  • Curtir 1

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