Menu
Coddy logo textTech

Powtórzenie – częstość występowania słów

Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 75 z 104.

challenge icon

Wyzwanie

Łatwy

Stwó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łowa
    • getCount(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::sort z 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ą n wskazującą, ile słów pojawi się dalej. Następnie odczytaj n słów, po jednym w każdym wierszu.

    Utwórz obiekt WordAnalyzer, dodaj wszystkie słowa, a następnie wyświetl:

    1. Wypisz Total words: <count>
    2. Wypisz Unique words: <count>
    3. Wypisz Word frequencies:, a następnie wywołaj printByFrequency()

Na przykład dla danych wejściowych:

7
apple
banana
apple
cherry
banana
apple
date

Wynik powinien wyglądać następująco:

Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1

Zauważ, ż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
the

Wynik:

Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1

Spró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

Poćwicz samodzielnie: Kompilator C++ online