Um contador de frequência de palavras
Conte as ocorrências de cada palavra num ficheiro de texto usando std::map
Um contador de frequência de palavras é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Objetivo do projeto
Leia um arquivo de texto e imprima cada palavra distinta com sua contagem de ocorrências. É um problema clássico que pode ser resolvido de forma limpa com std::map ou std::unordered_map.
Cabeçalhos necessários
E/S de arquivos, cadeias de caracteres e um contêiner associativo.
#include <fstream>
#include <map>
#include <string>
#include <iostream>Lendo palavras uma de cada vez
O operador de extração >> lê tokens separados por espaços em branco — perfeito para palavras brutas.
std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
counts[word]++;
}Normalizando palavras
Converta cada palavra para minúsculas para que "Olá" e "olá" sejam contabilizadas como a mesma palavra.
#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
[](unsigned char c) { return std::tolower(c); });Removendo pontuação
Remova a pontuação do início e do fim de cada palavra.
while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();Imprimindo as contagens
Percorra o mapa e imprima cada par. std::map percorre as entradas na ordem classificada pelas chaves.
for (const auto& [w, n] : counts) {
std::cout << w << ": " << n << "\n";
}Ordenado por frequência
Para imprimir por frequência em vez de em ordem alfabética, copie as entradas para um vector e ordene-o.
std::vector<std::pair<std::string, int>> entries(counts.begin(), counts.end());
std::sort(entries.begin(), entries.end(),
[](auto& a, auto& b) { return a.second > b.second; });As N mais comuns
Imprima apenas as 10 principais entradas (ou qualquer quantidade N) do vector ordenado.
for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
std::cout << entries[i].first << ": " << entries[i].second << "\n";
}map versus unordered_map
Para arquivos grandes, std::unordered_map é mais rápido em média (busca O(1)), mas percorre as entradas em uma ordem arbitrária. Use std::map para obter uma saída ordenada.
Palavras de parada
Filtre palavras curtas e comuns, como "o", "e" e "de", usando um conjunto de palavras de parada.
static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;Contando linhas ou caracteres
São variações do mesmo padrão: conte o total de linhas com std::getline e o total de caracteres com std::ifstream + std::istreambuf_iterator.
Considerações de desempenho
Para arquivos enormes, use unordered_map com chaves string_view, mapeie o arquivo na memória e evite alocações no heap para cada palavra.
Verificação rápida
Qual contêiner percorre automaticamente as entradas em ordem alfabética?
Recapitulação
Um contador de frequência de palavras reúne fluxos, cadeias de caracteres, contêineres associativos e algoritmos. Escolha map para uma saída ordenada ou unordered_map para obter velocidade. Normalize, remova a pontuação e considere palavras de parada para obter resultados mais limpos.
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “Um contador de frequência de palavras” é grátis?
Sim — o texto completo de “Um contador de frequência de palavras” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Um contador de frequência de palavras”?
Conte as ocorrências de cada palavra num ficheiro de texto usando std::map Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Um contador de frequência de palavras”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Construir uma calculadora CLI simples
- Ler e escrever ficheiros CSV
- Um jogo de adivinhação de números
- Um contador de frequência de palavras