SuissoS Posted October 9, 2013 at 09:47 PM Report #528268 Posted October 9, 2013 at 09:47 PM (edited) 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 October 10, 2013 at 04:41 PM by brunoais tags code + geshi
Flinger Posted October 9, 2013 at 10:24 PM Report #528279 Posted October 9, 2013 at 10:24 PM (edited) É 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 October 9, 2013 at 10:24 PM by Flinger
SuissoS Posted October 9, 2013 at 11:01 PM Author Report #528289 Posted October 9, 2013 at 11:01 PM Obrigado, já percebi e já corrigi. Já pus a funcionar.
HappyHippyHippo Posted October 10, 2013 at 04:36 AM Report #528300 Posted October 10, 2013 at 04:36 AM #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 Portugol Plus
SuissoS Posted October 10, 2013 at 12:30 PM Author Report #528338 Posted October 10, 2013 at 12:30 PM (edited) Já consegui por a dar. muito obrigado ! 🙂 Edited October 10, 2013 at 12:45 PM by SuissoS
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now