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
char
e terminação com'\0'
. for
para percorrer a string caractere a caractere.- Condicionais (
if
) para testar espaços, vogais e consoantes. - Biblioteca
<ctype.h>
(pra usartolower
eisalpha
). - 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
fgets
e 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;
}