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

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