Jump to content

[Resolvido] Separar uma frase, uma palavra por linha. (a frase tem espaços antes e no final , ignorar o mesmos)


Recommended Posts

Posted (edited)

Boas , estou com dificuldade em contar os espaços antes e no final da frase, a parte da separação já se encontra a funcionar.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> // strlen
#define Dim 100

/*
Desenvolva um programa que leia uma frase introduzida pelo utilizador e escreva cada
uma das palavras que constituem a frase numa linha separada.
Considere que as palavras estão separadas por um ou mais espaços em branco, podendo também existir espaços no
início e fim da frase.Exemplo: Hoje e Domingo!  
O programa deverá escrever:
Hoje
e
Domingo!
*/

void main()
{char frase[Dim];
int tamanho,i,espacoantesbrancos=0;printf("Introduza uma frase com menos de %d caracteres \n",Dim);
gets(frase);
tamanho=strlen(frase);

// Vamos ignorar o começo da frase
for (i = 0; frase[i] != ' ' ; i++)
{
if (frase[i] == ' ')
{
 espacoantesbrancos++;
}
}printf("existem %d espacos antes \n", espacoantesbrancos);

// Impressão da frase
for (i = espacoantesbrancos; i < tamanho; i++)
{

if (frase[i] != ' ')
{
 printf("%c", frase[i]);
}

if (frase[i] == ' ')
{
 printf("\n");
}
}

}

--------

Já vi como faço o começo, mas continuo com o problema de achar os espaços no final da frase.

O ideal penso que seria fazer isto com um for tanto podia andar com o ciclo para a frente como para trás, mas está-me a falhar as condições.


// Vamos ignorar o começo da frase
while (frase[i] == ' ')
{
espacoantesbrancos++;
i++;
}
Edited by thinkabout
Posted

vamos ver os algoritmos

(contar espaços no início da string)

- atribuir o valor de zero a uma variável determinando então o primeiro índice da string

- enquanto o caracter do índice indicado for um espaço, incrementar a variável

- o número de espaços iniciais é igual ao valor da variável no final do ciclo

(contar espaços no fim da string)

- atribuir o valor do tamanho da string menos 1 a uma variável determinado então o último índice da string

- enquanto o caracter do índice indicado for um espaço, decrementar a variável

- o número de espaços finais é igual ao tamanho da string menos o valor da variável menos um

agora implementa em código ...

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

vamos ver os algoritmos

(contar espaços no início da string)

- atribuir o valor de zero a uma variável determinando então o primeiro índice da string

- enquanto o caracter do índice indicado for um espaço, incrementar a variável

- o número de espaços iniciais é igual ao valor da variável no final do ciclo

for (i = 0; frase[i] == ' '; i++)
{
espacoantesbrancos++;
}
printf("existem %d espacos antes \n", espacoantesbrancos);

(contar espaços no fim da string)

- atribuir o valor do tamanho da string menos 1 a uma variável determinado então o último índice da string

- enquanto o caracter do índice indicado for um espaço, decrementar a variável

- o número de espaços finais é igual ao tamanho da string menos o valor da variável menos um

agora implementa em código ...


for (i = ultimoindice; frase[i] == ' '; i--)
{
ultimoindice--;
}

espacofinais=(tamanho-1)-ultimoindice;
printf("existem %d espacos no fim \n", espacofinais);

Já está a bombar, depois foi só acertar a condição de paragem do último for

 for (i = espacoantesbrancos; i < tamanho-espacofinais; i++) 

Não estava a ver a questão do último índice quando estava a contar para trás e também não estava apanhar depois o último menos um.

Maldito '/0' 😞 .

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.