Ir ao conteúdo
  • Cadastre-se
Dniel

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

Recommended Posts

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);	}

Compartilhar este post


Link para o post
Compartilhar em outros sites
    Visitante

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

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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 ;)  

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×