C++ Academy · Lekcja

Licznik częstości słów

Policz wystąpienia każdego słowa w pliku tekstowym za pomocą std::map

Lekcja 4 z 414 kroki

Licznik częstości słów to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Cel projektu

Odczytaj plik tekstowy i wyświetl każde unikalne słowo wraz z liczbą jego wystąpień. To klasyczny problem, który można elegancko rozwiązać za pomocą std::map lub std::unordered_map.

Wymagane nagłówki

Obsługa plików, napisy i kontener asocjacyjny.

#include <fstream>
#include <map>
#include <string>
#include <iostream>

Odczytywanie słów pojedynczo

Operator ekstrakcji >> odczytuje tokeny oddzielone białymi znakami — idealne rozwiązanie dla surowych słów.

std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
    counts[word]++;
}

Normalizowanie słów

Zamień każde słowo na małe litery, aby „Hello” i „hello” były liczone jako to samo.

#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
    [](unsigned char c) { return std::tolower(c); });

Usuwanie znaków interpunkcyjnych

Usuń znaki interpunkcyjne z początku i końca każdego słowa.

while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();

Wyświetlanie liczników

Przejdź po mapie i wyświetl każdą parę. std::map iteruje w posortowanej kolejności kluczy.

for (const auto& [w, n] : counts) {
    std::cout << w << ": " << n << "\n";
}

Sortowanie według częstości

Aby wyświetlać dane według częstości zamiast alfabetycznie, skopiuj elementy do wektora i posortuj go.

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

N najczęstszych elementów

Wyświetl tylko 10 najczęstszych elementów (lub dowolne N elementów) z posortowanego wektora.

for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
    std::cout << entries[i].first << ": " << entries[i].second << "\n";
}

map a unordered_map

W przypadku dużych plików std::unordered_map jest średnio szybszy (wyszukiwanie O(1)), ale iteruje w dowolnej kolejności. Użyj std::map, gdy potrzebujesz posortowanych danych wyjściowych.

Słowa pomijane

Odfiltruj często występujące krótkie słowa, takie jak „the”, „and” i „of”, korzystając ze zbioru słów pomijanych.

static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;

Liczenie wierszy lub znaków

Warianty tego samego wzorca: licz łączną liczbę wierszy za pomocą std::getline, a łączną liczbę znaków za pomocą std::ifstream i std::istreambuf_iterator.

Kwestie wydajności

W przypadku ogromnych plików użyj unordered_map z kluczami typu string_view, zmapuj plik w pamięci za pomocą mmap i unikaj alokacji na stercie dla każdego słowa.

Szybkie sprawdzenie

Jaki kontener automatycznie iteruje w kolejności alfabetycznej?

Podsumowanie

Licznik częstości słów łączy strumienie, napisy, kontenery asocjacyjne i algorytmy. Wybierz map, jeśli potrzebujesz posortowanych danych wyjściowych, lub unordered_map, jeśli zależy Ci na szybkości. Normalizuj słowa, usuwaj znaki interpunkcyjne i rozważ odfiltrowanie słów pomijanych, aby uzyskać czytelniejsze wyniki.

Bezpłatny start

Ucz się C++ dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Licznik częstości słów” jest bezpłatna?

Tak — pełny tekst „Licznik częstości słów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Licznik częstości słów”?

Policz wystąpienia każdego słowa w pliku tekstowym za pomocą std::map Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Licznik częstości słów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Budowa prostego kalkulatora CLI
  2. Odczytywanie i zapisywanie plików CSV
  3. Gra w zgadywanie liczby
  4. Licznik częstości słów
← Powrót do C++ Academy