Riepilogo - Frequenza delle parole
Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 75 di 104.
Sfida
FacileCostruiamo un analizzatore della frequenza delle parole che elabora il testo e visualizza i conteggi delle parole ordinati per frequenza. Questo è un classico compito di elaborazione del testo che mette insieme tutti i componenti della STL che hai imparato: map per contare, vector per ordinare, gli iteratori per attraversare gli elementi e le lambda per definire una logica di ordinamento personalizzata.
Organizzerai il codice in due file:
WordAnalyzer.h: definisci una classeWordAnalyzerche gestisce il conteggio e l'analisi delle parole.La tua classe dovrebbe usare internamente un
std::map<std::string, int>per memorizzare i conteggi delle parole. Implementa questi metodi:addWord(const std::string& word): incrementa il conteggio della parola specificatagetCount(const std::string& word): restituisce il conteggio di una parola specifica (0 se non viene trovata)getTotalWords(): restituisce il numero totale di parole aggiunte (la somma di tutti i conteggi)getUniqueWords(): restituisce il numero di parole uniche (la dimensione della mappa)printByFrequency(): stampa tutte le parole ordinate per frequenza in ordine decrescente. Per le parole con la stessa frequenza, ordinale alfabeticamente. Ogni riga dovrebbe mostrare:word: count
Per
printByFrequency(), dovrai trasferire il contenuto della mappa in un vector di coppie, quindi usarestd::sortcon una lambda che confronta prima i conteggi (in ordine decrescente) e poi le parole (in ordine crescente) in caso di parità.main.cpp: leggi un interonsulla prima riga, che indica quante parole seguiranno. Poi legginparole, una per riga.Crea un
WordAnalyzer, aggiungi tutte le parole e poi visualizza:- Stampa
Total words: <count> - Stampa
Unique words: <count> - Stampa
Word frequencies:, poi chiamaprintByFrequency()
- Stampa
Per esempio, con questo input:
7
apple
banana
apple
cherry
banana
apple
dateL'output dovrebbe essere:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1Nota come apple appaia per prima (frequenza più alta), seguita da banana; poi cherry e date sono ordinate alfabeticamente perché hanno lo stesso conteggio.
Un altro esempio con questo input:
5
the
cat
the
sat
theOutput:
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1Provalo tu
#include <iostream>
#include <string>
#include "WordAnalyzer.h"
using namespace std;
int main() {
int n;
cin >> n;
WordAnalyzer analyzer;
// TODO: Leggi n parole e aggiungile all'analizzatore
// TODO: Stampa "Total words: <count>"
// TODO: Stampa "Unique words: <count>"
// TODO: Stampa "Word frequencies:" e chiama printByFrequency()
return 0;
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniBuild e compilazione in C++File header e file sorgenteNamespace e ambitoIntroduzione alla programmazione orientata agli oggetti in C++Classi e oggetti a confrontoIl puntatore 'this'Metodi (funzioni membro)Attributi (membri dati)Fondamenti di costruttori e distruttoriRiepilogo - Calcolatrice semplice4Proprietà delle classi
Membri di istanza e staticiGetter e setterFunzioni membro constParola chiave mutableMetodi e variabili staticiFunzioni e classi friendRiepilogo - Gestore di conti bancari7Ereditarietà
Ereditarietà di baseLivelli di accesso nell’ereditarietàOrdine di chiamata di costruttori e distruttoriRidefinizione dei metodiFunzioni virtuali e VTableEreditarietà multiplaEreditarietà virtualeRiepilogo - Gerarchia dei dipendenti10Panoramica della STL
Panoramica e filosofia della STLContenitori STLIteratoriAlgoritmi STLFuntori ed espressioni lambdaRiepilogo - Frequenza delle parole2Gestione della memoria
Memoria Stack vs HeapPuntatori e riferimentiMemoria dinamica (new/delete)Puntatori intelligenti in C++RAII in C++Riepilogo - Gestore di array dinamico5Incapsulamento
Specificatori di accesso in C++Specificatori di accesso in dettaglioOccultamento delle informazioniStruct vs classClassi annidate e interneRiepilogo - Sistema di registrazione degli studenti8Polimorfismo
Polimorfismo a compile time e a runtimeOverload delle funzioniFunzioni virtuali: ripassoFunzioni virtuali pureClassi astratteProgettazione delle interfacce in C++Dynamic casting e RTTIRipasso: calcolatrice di forme11Concetti avanzati di OOP
Composizione vs ereditarietàMixin tramite CRTPIdiom PimplType ErasureEnum class e tipizzazione forteGestione delle eccezioni in OOPGerarchie personalizzate di eccezioni14Pattern di progettazione - Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositeRAII come pattern3Costruttori e distruttori
Costruttore predefinitoCostruttore con parametriCostruttore di copiaCostruttore di spostamentoListe di inizializzazione dei costruttoriCostruttori delegantiApprofondimento sui distruttoriRegola del Tre / Cinque / ZeroRipasso - classe String6Sovraccarico degli operatori
Introduzione al sovraccarico degli operatoriSovraccarico degli operatori aritmeticiSovraccarico degli operatori di confrontoOperatori di flussoSovraccarico dell'operatore di assegnazioneSovraccarico degli operatori [] e ()Operatori di conversione di tipoRipasso - Classe Matrix9Template
Template di funzioneTemplate di classeSpecializzazione dei templateTemplate variadiciBasi di SFINAE e dei trait di tipoRiepilogo - Contenitore genericoEsercitati da solo: Compilatore C++ online