Ir ao conteúdo
  • Cadastre-se

Duvida Inversao da Palavra (Sem mudar posicao)


dut3d

Posts recomendados

A questao é a seguinte:

Elabore um programa que solicite ao usuário que digite uma frase. Este programa

deverá inverter a frase mas, sem mudar sua posicao e apresentá-la na tela.

ex: Alo mundo

olA odnum

eu consegui fazer a inversao da frase mas nao consegui deixar na mesma posicao meu codigo é o seguinte:

#define TAM 10
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
int I;
char FRASE[TAM];


printf("Informe uma frase: \n");
gets(FRASE);

printf("\n\na frase invertida é : \n");
for (I=strlen (FRASE)-1; I>=0; I--)
{
printf("%c",FRASE[I]);
}
}

Alguem me ajuda a completar esse programa. Obrigado desde já

Link para o comentário
Compartilhar em outros sites

Pelo que entendi, o problema consiste em escrever as palavras de uma frase na ordem inversa, mas sem mudar a ordem das palavras na frase... certo?

Pra identificar uma palavra numa string, é só percorrer ela até encontrar um espaço. Qualquer coisa que veio antes é uma palavra. Depois repete até o próximo espaço, e faz isso até o final da string.

Existe um monte de funções da biblioteca <string.h> que você pode usar pra fazer isso... (http://www.cplusplus.com/reference/clibrary/cstring/) strtok, strncpy, strchr...

Mas um jeito bem simples é apenas criar uma string auxiliar e usar um for pra percorrer a string principal. A medida que você vai percorrendo ela, você vai copiando os caracteres pra string auxiliar. Quando encontrar um espaço, você fecha a string auxiliar com um '\0' (pra indicar final de string pro C) e aí joga essa string auxiliar numa função pra inverter ela, mais ou menos como você fez aí.

Ex:


char frase[] = "um dois tres quatro";
char aux[30];

int x;
int c = 0;

for (x=0; x < tamanhoDaFrase; x++)
if (frase[x] == ' ' || x == tamanhoDaFrase-1) {
aux[c] = '\0';
inverteFrase( frase2 );
c = 0;
}
else {
aux[c++] = frase[x];
}
}

Link para o comentário
Compartilhar em outros sites

Olha fiz meu codigo de uma outra maneira ficou assim:

#define TAM [100]
#include <stdio.h>
#include <conio.h>

int main ()
{
char vet1[50];
char vet2[50];
int frase, i;

printf ("Informe uma frase: \n");
gets (frase);

for (i=strlen (vet1)-1; i>0; i--)
for (i=strlen (vet2)-1; i>0; i--)
{
printf ("%c",frase[TAM]);
}
}

ele esta dando um erro, nao sei se o programa esta certo, se alguem puder me ajudar.. Obrigado

Link para o comentário
Compartilhar em outros sites

Realmente deveria dar erro, pois você não possui conteúdo em 'vet1' e 'vet2', logo, o 'strlen()' retornará 0 para eles, fazendo com que não entre no 'for'.

Fiz um bem simples:


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

#define TAM 30

int main(void)
{
char FRASE[TAM];
int inicio = 0;
int fim = 0;
int espaco = 0;


printf("Informe uma frase: \n");
gets(FRASE);

printf("\n\na frase invertida é : \n");
while ( fim <= strlen(FRASE) )
{
if ( FRASE[fim] != ' ' && fim < strlen(FRASE) ) /** Delimitadores sao espaco e fim de frase **/
fim++;
else
{
espaco = fim; /** Marca a posicao do espaco **/
fim--; /** Retorna uma posicao, ficando no ultimo char da palavra **/
for ( ; fim >= inicio; fim-- ) /** Percorre a palavra da ultima posicao ate o inicio dela **/
printf("%c", FRASE[fim]);
printf(" ");
inicio = espaco + 1; /** Posiciona para o inicio da proxima palavra **/
fim = inicio; /** Iguala inicio e fim, para comecar a contagem da proxima palavra **/
}
}

return 0;
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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