C++ Academy · Aula

Um contador de frequência de palavras

Conte as ocorrências de cada palavra num ficheiro de texto usando std::map

Aula 4 de 414 etapas

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.

Grátis para começar

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

  1. Construir uma calculadora CLI simples
  2. Ler e escrever ficheiros CSV
  3. Um jogo de adivinhação de números
  4. Um contador de frequência de palavras
← Voltar para C++ Academy