×
Ir ao conteúdo
  • Cadastre-se

Funções usando strings - retirar os espaços em branco na frase


Valéria_Farias

Posts recomendados

Pessoal não estou conseguindo terminar este algoritmo pois não sei como retirar os espaços na frase e nem colocar a primeira letra de cada palavra da mesma em maiúscula. O exercicio é assim:

Faça um Programa em C, que leia uma frase (string) e uma palavra. Logo após faça as seguintes operações:

- Verifique se a palava digitada foi "Paz". Informe ao usuário;

- Coloque a primeira letra de cada palavra em maiúscula (na frase);

- Retire os espaços em branco da frase;

- Conte quantas vogais existem na frase (apresente ao usuário a quantidade de cada uma delas);

- Concatene as duas strings lidas.

Meu código está assim:



# include <stdio.h>
# include <stdlib.h>
# include <string.h> // biblioteca de strings
# include <ctype.h>
# define TAM 50

main()
{

char str1[TAM],str2[TAM];
char resp[] = "Paz";
int i = 0,conta = 0,conte = 0,conti = 0,conto = 0,contu = 0,pos = 0;

puts("Digite uma frase");
gets(str1);
printf("\n");

puts("Digite uma palavra");
gets(str2);
printf("\n");

while ( strcmp ( str2 , resp) != 0 )
{
puts("Palavra Errada");
puts("Tente Novamente!");
gets(str2);
}

puts("* Palavra Digitada foi Paz *");
printf("\n");

for ( i = 0; i <= strlen(str1); i++ )
{

if ( str1[i] == 'a' || str1[i] == 'A')
conta++;
if ( str1[i] == 'e' || str1[i] == 'E')
conte++;
if ( str1[i] == 'i' || str1[i] == 'I')
conti++;
if ( str1[i] == 'o' || str1[i] == 'O')
conto++;
if ( str1[i] == 'u' || str1[i] == 'U')
contu++;
}

printf("Quantidade de vogais existentes na frase: \n\n");
printf("Letras A = %d\n",conta);
printf("\n");
printf("Letras E = %d\n",conte);
printf("\n");
printf("Letras I = %d\n",conti);
printf("\n");
printf("Letras O = %d\n",conto);
printf("\n");
printf("Letras U = %d\n",contu);
printf("\n");

strcat(str1,str2);

puts(str1);

printf("\n");


system("pause");


}

Link para o comentário
Compartilhar em outros sites

Pra colocar a primeira letra de cada palavra maiúscula, você pode usar essa lógica:

frase[] = "o rato roeu a roupa do rei de roma"

- frase[0] sempre vai ser maiúscula

- se frase[x] for um espaço e frase for maior que x, então frase[x+1] vai ser maiúscula

Ou seja, sempre que houver um espaço, logo em seguida vai haver o início de uma palavra. (bem, pode ser que o usuário digite dois espaços, daí você precisa criar outro teste pra isso).


#include ctype.h
...

str1[0] = toupper(str1[0]); //frase[0]

for(x=0; x < strlen(str1); x++)
if(str1[x] == ' ' && x+1 < strlen(str1))
str1[x+1] = toupper(str1[x+1]);

Pra remover os espaços, você pode ir "puxando" os caracteres seguintes pra trás, sempre que encontrar um. Mas acho que já existe uma função pronta que faz isso.


char frase[] = "o rato roeu a roupa do rei de roma";
printf("%s\n", frase);

for(x=0; x < strlen(frase); x++)
if(frase[x] == ' ') {
for(y=x; y < strlen(frase); y++)
frase[y] = frase[y+1];
}

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

Se ficou meio confusa essa bagunça que fiz, fique a vontade pra perguntar.

[]s

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...
  • Membro VIP
teria como fazer essa parte de apagar espaços em Branco sem utilizar strlen?

tipo encontrando os valores de cada indice e onde fosse ' espaço ', puxar pra trás?

Teria sim, veja F5Rua4D.gif:


#include <stdio.h>



int main(void)
{
char String[] = " Junte estas palavras ! ";
for(int x = 0; String[x] != '\0'; x++)
{
while(String[x] == ' ')
{
for(int y = x; String[y] != '\0'; y++)
{
String[y] = String[y + 1];
}
}
}
printf("String: \"%s\".", String);
getchar();
return 0;
}

Espero ter ajudado GbhmuXl.gif.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Curso de Hacker Ético

LANÇAMENTO!

CLIQUE AQUI E CONFIRA!

* Este curso não é ministrado pela equipe do Clube do Hardware.