Ir ao conteúdo

Ajuda em um programa que leia uma frase e imprima somente as vogais.


Dniel

Posts recomendados

Postado

Esse é meu primeiro post, sou um iniciante em C e gostaria de saber como devo proceder para criar um programa que leia uma frase e imprima somente as vogais e também, saber no que estou errando em meu programa que segue abaixo.

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){	char frase[50];	int a,i;		printf("Digite uma frase");	gets(frase);	a=strlen(frase);	for(i=0;i<a;i++)	{		if (frase[i]='a') printf("%c",frase[i]);		if (frase[i]='e') printf("%c",frase[i]);		if (frase[i]='i') printf("%c",frase[i]);		if (frase[i]='o') printf("%c",frase[i]);		if (frase[i]='u') printf("%c",frase[i]);	}	system("pause");	return(0);	}
Postado

@Dniel

 

Você esqueceu do "==":

if (frase[i] == 'a') //voce colocou frase[i] = 'a'//...

Ou você poderia colocar tudo junto:

for(i=0;i<a;i++)    {        if (frase[i] == 'a' || frase[i] == 'e' || frase[i] == 'i' || frase[i] == 'o' || frase[i] == 'u')        {            printf("%c ", frase[i]);        }    }

obs: O código só imprime as vogais minúsculas, não esquece das maiúsculas.

Postado

Alternativamente, você pode utilizar ponteiros neste exercício. Veja o meu código:

#include <stdio.h>#include <stdlib.h>void main(void){    char vogais[] = "aeiou";    char frase[100];    char *p = frase;    char *q = vogais;    char c;    int i;    int j = 0;    printf("Insira uma frase\n");    gets(frase);    printf("\nAs vogais: " );    for (i = 0; i < strlen(frase); i++)    {        c = tolower(*(p + i));        while (j < strlen(vogais))        {             if (c == *(q + j))             {                printf("%c", *(p + i));                break;             }             else            {                 j++;            }        }        j = 0;    }}

Eu criei duas strings. Uma delas contém as vogais possíveis. A outra string armazenará a frase. 

Como vi que é novato, ponteiros são variáveis que armazenam endereço de memória de uma outra variável  :)

O ponteiro do tipo char p por exemplo, vai apontar para o endereço do primeiro caracter de frase (neste caso não preciso do "&" porque o nome sozinho do array já me representa o endereço do primeiro índice). Do mesmo jeito foi feito com q em relação a string vogais.

Os inteiros i e j serão úteis abaixo para a comparação dos termos.

 

Explicado as variáveis, vamos ao programa:

Assim que você digitar a frase, ele vai entrar num for que vai comparar letra a letra até o '\0' de frase (que seria o equivalente a i[strlen(frase)] = '\0'). É quando indica que a frase acabou. Neste caso, para corrigir a diferenciação de maiúsculas e minúsculas, criei uma variável char c que armazena temporariamente cada letra da frase, mas em minúsculo, com a função tolower. Escrever *(p + i) - utilizando-se o conceito de aritmética de ponteiros, é a mesma coisa que escrever frase :) , uma vez que p aponta pra frase. 

Após c armazenar a letra em minúsculo, vai comparar se é igual a alguma das vogais na string vogais. Se for igual a *(q + j), que é igual a vogais[j], ele vai imprimir a letra do jeito que está na frase (maiúsculo ou minúsculo) e vai sair do while através do comando break. Se não, vai incrementar j e vai comparar o caracter c com outras vogais. Em ambos os casos, no final eu zero o j para que recomece a comparação com as outras letras das frase e assim sucessivamente.

Quando você rodar este programa vai entender melhor o que digitei e verá que funciona.

 

Espero que tenha sido útil ;)  

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!