Ir ao conteúdo

Posts recomendados

Postado

Olá, estou tendo problemas para criar um programa que inverta palavras, a entrada consiste de diversas linhas com diversas palavras e a saída consistirá das mesmas linhas e palavras da entrada, só que as letras de cada palavra devem estar invertidas.

Por exemplo:

I love you. = I evol .uoy

You love me. = uoY evol .em

We're a happy family = er'eW a yppah .ylimaf

 

Já dei uma olhada em pilhas mas de nenhum jeito que fiz deu certo, se possível alguém ajudar e/ou sugerir dicas agradeço.

Preferência para C++ o código, mas pode ser em C também.

Obrigado desde já.

  • Curtir 1
Postado

#include <bits/stdc++.h>

#define MAX 20

using namespace std;

int main()
{
    char frase[100], pilha[MAX], saida[100];
    int i = 0, j = 0, topo=-1;
    gets(frase);
    do
    {
        if (frase != ' ')
        {
            if (topo < MAX)
                pilha[++topo] = frase[i++];
            else
            {
                cout << "Pilha cheia!\n";
                return -1;
            }
        }
        else
        {
            while (topo >= 0)
                saida[j++] = pilha[topo--];
            saida[j++] = frase[i++];
        }
    }
    while (frase != '.');
    saida[j] = '.';
    cout << saida << endl;
    return 0;
}
 

Aqui está, em todos os casos de teste ele funciona ok até chegar na última palavra.

  • Curtir 1
Postado

@Metam0rfo    seu código não funcionou não, ele só mostra pilha cheia, então você disse que pode ser em c então modifiquei seu código e ele está  na linguagem c, mas pode compilar em c++ que funciona também .

experimente esse aqui :

#include <stdio.h>
#include <string.h>
char frase [300];
char frase2[305];
int b,c,d,f,i,j;
int main(){
    printf("       Vamos Inverter As Palavras\n\n");
    printf("Digite Uma Frase Com Ate 300 Caracteres: ");
    gets(frase);
    c=0;d=0;
    f=strlen(frase);          /*pega o tamanho da frase*/
    for(i=0;i<f;i++){
        if(frase[i]==' '){    /*verifica quantos espaços tem na frase*/
            d++;
        }
    }
    if(d==0 && f > 0){       /*se na frase não tem nenhum espaço mas tem uma palavra*/
        for(i=f-1;i>=0;i--){ /*pegando da ultima letra da palavra ate a primaeira*/
            printf("%c",frase[i]);/*imprime ela na tela ao contrario*/
        }
    }
    if(f==0){printf("\nVoce Nao Digitou Nada...!\n\n");}
    if(d>0){
        frase2[0]=' ';                  /*coloca um espaço no começo da frase*/
        for(i=0;i<f;i++){frase2[i+1]=frase[i];}/*frase2 igual frase*/
        frase2[f+1]='.';                /*coloca um ponto no final da frase*/
        for(i=1;i<=f+1;i++){            /*vai percorrer toda a frase*/
            if(frase2[i]==' ' || frase2[i]=='.'){  /*um espaço fim da palavra*/
                c=i-1;                  /*pega a posição da ultima letra da palavra*/
                while(frase2[c]!=' '){  /*repete ate encontrar um espaço na frase que é o começo da palavra*/
                    printf("%c",frase2[c]); /*imprime a letra que esta nessa posição da frase*/
                    c--;                /*volta uma posição na frase*/
                }
                printf(" ");            /*coloca um espaço entre a palavra e a proxima*/
            }
        }
    }
    gets(frase);                        /*esper apertar enter*/
    return 0;
}

 

  • Curtir 1
Visitante
Este tópico está impedido de receber 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!