Licznik częstości słów
Policz wystąpienia każdego słowa w pliku tekstowym za pomocą std::map
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.
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
- Budowa prostego kalkulatora CLI
- Odczytywanie i zapisywanie plików CSV
- Gra w zgadywanie liczby
- Licznik częstości słów