Elaborar um programa em C que leia uma frase e armazene-a em um vetor de caracteres (cuidado com a leitura!). Depois crie uma função para contar o número de espaços em branco na frase, outra para contar o número de vogais, e outra para contar o número de consoantes.
Passo 1
Beleza! O enunciado pede pra criar um programa em C que:
- Leia uma frase com espaços (por isso cuidado na leitura);
- Armazene essa frase num vetor de
char; - Tenha três funções separadas:
- Uma para contar espaços em branco;
- Uma para contar vogais;
- Uma para contar consoantes.
Conteúdo que vamos usar:
- Leitura de string com
fgets(pra ler tudo, inclusive espaços). - Vetores de
chare terminação com'\0'. forpara percorrer a string caractere a caractere.- Condicionais (
if) para testar espaços, vogais e consoantes. - Biblioteca
<ctype.h>(pra usartolowereisalpha). - Criar e chamar funções em C.
Passo 2
Primeiro a leitura da frase. Em C, se você usar
scanf("%s", ...) ele para no primeiro espaço, então a gente usa:fgets(frase, MAX, stdin);
Isso lê até
Depois a gente remove o
MAX-1 caracteres ou até apertar Enter.Depois a gente remove o
'\n' que o fgets coloca no final:frase[strcspn(frase, "\n")] = '\0';
A função
strcspn(frase, "\n") retorna o índice do '\n' na string, e a gente troca por '\0'.Passo 3
Agora vamos contar os espaços. A ideia é bem simples:
- Percorro a string do começo ao
'\0'. - Se
frase[i] == ' ', incremento meu contador.
Em código numa função:
int contarEspacos(const char *s) {
int cont = 0;
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] == ' ')
cont++;
}
return cont;
}
Passo 4
Contar vogais. Vou usar
tolower pra “normalizar” tudo pra minúsculo e só testar a, e, i, o, u.int contarVogais(const char *s) {
int cont = 0;
for (int i = 0; s[i] != '\0'; i++) {
char c = tolower(s[i]);
if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u')
cont++;
}
return cont;
}
Passo 5
Contar consoantes. Aqui a ideia é:
- Primeiro testar se é letra (
isalpha). - Depois garantir que não é uma das vogais.
int contarConsoantes(const char *s) {
int cont = 0;
for (int i = 0; s[i] != '\0'; i++) {
char c = tolower(s[i]);
if (isalpha(c) &&
!(c=='a' || c=='e' || c=='i' || c=='o' || c=='u'))
cont++;
}
return cont;
}
Passo 6
Finalmente, no
main, a gente:- Declara o vetor;
- Lê a frase com
fgetse tira o\n; - Chama cada função;
- Imprime o resultado.
Resposta
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 100
int contarEspacos(const char *s) {
int cont = 0;
for (int i = 0; s[i] != '\0'; i++)
if (s[i] == ' ')
cont++;
return cont;
}
int contarVogais(const char *s) {
int cont = 0;
for (int i = 0; s[i] != '\0'; i++) {
char c = tolower(s[i]);
if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u')
cont++;
}
return cont;
}
int contarConsoantes(const char *s) {
int cont = 0;
for (int i = 0; s[i] != '\0'; i++) {
char c = tolower(s[i]);
if (isalpha(c) &&
!(c=='a' || c=='e' || c=='i' || c=='o' || c=='u'))
cont++;
}
return cont;
}
int main() {
char frase[MAX];
printf("Digite uma frase: ");
fgets(frase, MAX, stdin);
frase[strcspn(frase, "\n")] = '\0';
printf("Espaços em branco: %d\n", contarEspacos(frase));
printf("Vogais: %d\n", contarVogais(frase));
printf("Consoantes: %d\n", contarConsoantes(frase));
return 0;
}