Powtórzenie – częstość występowania słów
Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 75 z 104.
Wyzwanie
ŁatwyStwórzmy analizator częstotliwości słów, który przetwarza tekst i wyświetla liczbę wystąpień słów posortowanych według częstotliwości. To klasyczne zadanie przetwarzania tekstu, które łączy wszystkie poznane przez Ciebie komponenty STL: map do zliczania, vector do sortowania, iteratory do przechodzenia po elementach oraz lambdy do niestandardowej logiki sortowania.
Rozmieścisz swój kod w dwóch plikach:
WordAnalyzer.h: Zdefiniuj klasęWordAnalyzer, która zarządza zliczaniem i analizą słów.Twoja klasa powinna wewnętrznie używać
std::map<std::string, int>do przechowywania liczby wystąpień słów. Zaimplementuj następujące metody:addWord(const std::string& word): zwiększa liczbę wystąpień danego słowagetCount(const std::string& word): zwraca liczbę wystąpień określonego słowa (0, jeśli go nie znaleziono)getTotalWords(): zwraca łączną liczbę dodanych słów (sumę wszystkich wystąpień)getUniqueWords(): zwraca liczbę unikalnych słów (rozmiar mapy)printByFrequency(): wyświetla wszystkie słowa posortowane według częstotliwości w kolejności malejącej. Słowa o tej samej częstotliwości posortuj alfabetycznie. Każdy wiersz powinien wyświetlać:word: count
W przypadku
printByFrequency()musisz przenieść zawartość mapy do wektora par, a następnie użyćstd::sortz lambdą, która najpierw porównuje liczbę wystąpień (w kolejności malejącej), a przy remisie — słowa (w kolejności rosnącej).main.cpp: Odczytaj w pierwszym wierszu liczbę całkowitąnwskazującą, ile słów pojawi się dalej. Następnie odczytajnsłów, po jednym w każdym wierszu.Utwórz obiekt
WordAnalyzer, dodaj wszystkie słowa, a następnie wyświetl:- Wypisz
Total words: <count> - Wypisz
Unique words: <count> - Wypisz
Word frequencies:, a następnie wywołajprintByFrequency()
- Wypisz
Na przykład dla danych wejściowych:
7
apple
banana
apple
cherry
banana
apple
dateWynik powinien wyglądać następująco:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1Zauważ, że apple pojawia się jako pierwsze (największa częstotliwość), a następnie banana; cherry i date są potem posortowane alfabetycznie, ponieważ mają taką samą liczbę wystąpień.
Inny przykład danych wejściowych:
5
the
cat
the
sat
theWynik:
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1Spróbuj swoich sił
#include <iostream>
#include <string>
#include "WordAnalyzer.h"
using namespace std;
int main() {
int n;
cin >> n;
WordAnalyzer analyzer;
// TODO: Wczytaj n słów i dodaj je do analizatora
// TODO: Wypisz "Total words: <count>"
// TODO: Wypisz "Unique words: <count>"
// TODO: Wypisz "Word frequencies:" i wywołaj printByFrequency()
return 0;
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneBudowanie i kompilacja C++Pliki nagłówkowe i pliki źródłowePrzestrzenie nazw i zakresWprowadzenie do programowania obiektowego w C++Klasy a obiektyWskaźnik „this”Metody (funkcje składowe)Atrybuty (składowe danych)Podstawy konstruktorów i destruktorówPowtórzenie – prosty kalkulator4Właściwości klas
Elementy instancji a elementy statyczneGettery i setteryStałe funkcje składoweSłowo kluczowe mutableMetody i zmienne statyczneFunkcje i klasy zaprzyjaźnionePodsumowanie – menedżer konta bankowego7Dziedziczenie
Podstawy dziedziczeniaPoziomy dostępu w dziedziczeniuKolejność wywołań konstruktora i destruktoraNadpisywanie metodFunkcje wirtualne i VTableWielokrotne dziedziczenieDziedziczenie wirtualnePowtórzenie — hierarchia pracowników10Przegląd STL
Przegląd i filozofia STLKontenery STLIteratoryAlgorytmy STLFunktory i wyrażenia lambdaPowtórzenie – częstość występowania słów2Zarządzanie pamięcią
Pamięć stosu a stertyWskaźniki i referencjePamięć dynamiczna (new/delete)Inteligentne wskaźniki w C++RAII w C++Podsumowanie — menedżer tablicy dynamicznej5Hermetyzacja
Specyfikatory dostępu w C++Specyfikatory dostępu — szczegółowoUkrywanie informacjiStruktura a klasaKlasy zagnieżdżone i wewnętrznePodsumowanie — system ewidencji studentów8Polimorfizm
Polimorfizm czasu kompilacji i wykonaniaPrzeciążanie funkcjiFunkcje wirtualne — powtórkaCzysto wirtualne funkcjeKlasy abstrakcyjneProjektowanie interfejsów w C++Rzutowanie dynamiczne i RTTIPodsumowanie — kalkulator kształtów3Konstruktory i destruktory
Konstruktor domyślnyKonstruktor z parametramiKonstruktor kopiującyKonstruktor przenoszącyListy inicjalizacyjne konstruktoraKonstruktory delegująceDestruktor — szczegółowe omówienieZasada trzech / pięciu / zeraPodsumowanie — klasa String6Przeciążanie operatorów
Wprowadzenie do przeciążania operatorówPrzeciążanie operatorów arytmetycznychPrzeciążanie operatorów porównaniaOperatory strumieniowePrzeciążanie operatora przypisaniaPrzeciążanie operatorów [] i ()Operatory konwersji typówPodsumowanie — klasa Matrix9Szablony
Szablony funkcjiSzablony klasSpecjalizacja szablonówSzablony wariadycznePodstawy SFINAE i cech typówPodsumowanie — kontener generycznyPoćwicz samodzielnie: Kompilator C++ online