Jump to content
SuissoS

Reverter uma frase

Recommended Posts

SuissoS

Estou a praticar para o meu teste esta semana e estou a resolver um exercicio em que tenho de pedir ao utilizador uma frase, mostrar a frase sem espaços, e de seguida mostrar a frase sem espaços revertida(Ex: eu sou estudante/eusouestudante/etnadutseuosue) e esta-me a dar erro a parte de mostrar a frase sem espaço revertida pois não me aparece nada. alguem me pode explicar o porque ?

Deixo aqui o código:

#include 

int main() {
  int i=0,j=0;
  char frase[200], aux[200];
  printf("Digite uma frase:\n");
  fgets(frase,200,stdin);
  while(frase[i]!='\0') {
   if (frase[i] == ' ') {
      aux[j]=frase[i+1];
      i++;
   } else {
      aux[j]=frase[i];
   }
  i++;
  j++;
  }
  aux[j]='\0';
  printf("%s\n",aux);
  i=0;
  while(aux[i]!='\0') {
   frase[i]=aux[j-i];
   i++;
  }
  printf("%s\n",frase);
  return 0;
}

Edited by brunoais
tags code + geshi

Share this post


Link to post
Share on other sites
Flinger

É simples.

aux[j]='\0';
  printf("%s\n",aux);
  i=0;
  while(aux[i]!='\0') {
frase[i]=aux[j-i];	
...

para i=0, tens frase[0] = aux[j]... acima tu dizes aux[j] = '\0', por isso o primeiro caracter da tua frase é o fim de string.

Edited by Flinger

Share this post


Link to post
Share on other sites
HappyHippyHippo

#include 

int main() {
  int i=0,j=0;
  char frase[200], aux[200];

  printf("Digite uma frase:\n");
  fgets(frase,200,stdin);

  // o fgets tem uma particulariedade no que toca ao caracter '\n' ... é inserido na string 

  while(frase[i]!='\0') {
   if (frase[i] == ' ') {
      aux[j]=frase[i+1];  // se estás a tratar do caracter "frase[i]" não tens de mexer em "frase[i+1]"
      i++;
   } else {
      aux[j]=frase[i];
   }
   i++;
   j++; // só faz sentido incrementar se realmente gravaste alguma coisa no array "aux"
  }
  aux[j]='\0';

  printf("%s\n",aux);

  i=0;
  while(aux[i]!='\0') {
   frase[i]=aux[j-i]; // qual o valor de "j" ?
   i++;
  }
  printf("%s\n",frase);

  return 0;
} 

a minha solução :

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

#define xorswap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))

int main() {
int i = 0, size = 0;
char frase[200], aux[200];

/* pedir a frase */
printf("Digite uma frase:");
fflush(stdout);
fgets(frase, 200, stdin);

/* ciclo sobre todos os caracteres da frase inserida
 * ignorando todos os caracteres após ter encontrado o esperado '\n' (ENTER)
 * lido pelo fgets */
while (frase[i] != 0 && frase[i] != '\n') {
	/* verificação se o caracter não é espaço */
	if (frase[i] != ' ') {
		/* copiar o caracter "não espaço" para o array auxiliar */
		aux[size] = frase[i];
		size++;
	}
	/* incremento do ciclo */
	i++;
}
/* adicionar o caracter '\0' ao final da frase sem espaços */
aux[size] = 0;

printf("frase sem espacos : %s\n", aux);

/* ciclo de inversão da string */
for (i = 0; i < size / 2; i++) {
	xorswap(aux[i], aux[size - i - 1]);
}

printf("frase sem espacos invertida: %s\n", aux);

return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.