Özet - Kelime Frekansı
Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 75 / 104.
Görev
KolayMetni işleyen ve kelime sayılarını frekansa göre sıralanmış şekilde görüntüleyen bir Kelime Frekansı Analizcisi oluşturalım. Bu, öğrendiğiniz tüm STL bileşenlerini bir araya getiren klasik bir metin işleme görevidir: sayım için map, sıralama için vector, gezinme için yineleyiciler ve özel sıralama mantığı için lambda ifadeleri.
Kodunuzu iki dosya arasında düzenleyeceksiniz:
WordAnalyzer.h: Kelime sayımını ve analizini yöneten birWordAnalyzersınıfı tanımlayın.Sınıfınız, kelime sayılarını dahili olarak depolamak için bir
std::map<std::string, int>kullanmalıdır. Şu metotları uygulayın:addWord(const std::string& word): verilen kelimenin sayısını artırırgetCount(const std::string& word): belirli bir kelimenin sayısını döndürür (bulunamazsa 0)getTotalWords(): eklenen toplam kelime sayısını döndürür (tüm sayıların toplamı)getUniqueWords(): benzersiz kelime sayısını döndürür (map'in boyutu)printByFrequency(): tüm kelimeleri frekansa göre azalan sırada yazdırır. Frekansı aynı olan kelimeler alfabetik olarak sıralanır. Her satırda şu gösterilmelidir:word: count
printByFrequency()için map içeriğini çiftlerden oluşan bir vektöre aktarmanız, ardından önce sayıya göre (azalan), eşitlik durumunda ise kelimeye göre (artan) karşılaştırma yapan bir lambda ilestd::sortkullanmanız gerekir.main.cpp: İlk satırda, ardından kaç kelime geleceğini belirten bir tamsayınokuyun. Daha sonra her satırda bir kelime olacak şekildenkelime okuyun.Bir
WordAnalyzeroluşturun, tüm kelimeleri ekleyin, ardından şunları görüntüleyin:Total words: <count>yazdırınUnique words: <count>yazdırınWord frequencies:yazdırıp ardındanprintByFrequency()metodunu çağırın
Örneğin, aşağıdaki girdiyle:
7
apple
banana
apple
cherry
banana
apple
dateÇıktı şu şekilde olmalıdır:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1apple kelimesinin ilk sırada (en yüksek frekans), ardından banana kelimesinin geldiğine dikkat edin; cherry ve date ise aynı sayıya sahip oldukları için alfabetik olarak sıralanmıştır.
Aşağıdaki girdiyi içeren başka bir örnek:
5
the
cat
the
sat
theÇıktı:
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1Kendin dene
#include <iostream>
#include <string>
#include "WordAnalyzer.h"
using namespace std;
int main() {
int n;
cin >> n;
WordAnalyzer analyzer;
// TODO: n kelimeyi oku ve analyzer'a ekle
// TODO: "Total words: <count>" yazdır
// TODO: "Unique words: <count>" yazdır
// TODO: Print "Word frequencies:" and call printByFrequency()
return 0;
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarC++ Build ve DerlemeBaşlık Dosyaları ve Kaynak DosyalarıAd Alanları ve KapsamC++'ta OOP'ye GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriÖzet - Basit Hesap Makinesi4Sınıf Özellikleri
Örnek ve Statik ÜyelerGetter ve Setter MetotlarıConst Üye FonksiyonlarMutable Anahtar KelimesiStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim SeviyeleriCtor ve Dtor Çağrılma SırasıMetot Geçersiz KılmaSanal Fonksiyonlar ve VTableÇoklu KalıtımSanal KalıtımÖzet - Çalışan Hiyerarşisi10STL Genel Bakış
STL Genel Bakış ve FelsefesiSTL KonteynerleriİteratörlerSTL AlgoritmalarıFunctor'lar ve Lambda İfadeleriÖzet - Kelime Frekansı13Tasarım Kalıpları 1. Bölüm
Tasarım Kalıplarına GirişSingleton KalıbıFactory ve Abstract FactoryBuilder KalıbıObserver KalıbıStrategy Kalıbı2Bellek Yönetimi
Stack ve Heap Bellekİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++'ta Akıllı İşaretçilerC++'ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'da Erişim BelirleyicilerDerinlemesine Erişim BelirleyicilerBilgi GizlemeStruct vs Classİç İçe ve Dahili SınıflarÖzet - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDynamic Casting ve RTTIÖzet - Şekil Hesaplayıcı3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopya YapıcıTaşıma YapıcısıYapıcı İlklendirme ListeleriTemsilci YapıcılarYıkıcılara Derinlemesine BakışÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatör Aşırı YüklemeKarşılaştırma Operatörü Aşırı YüklemeStream OperatörleriAtama Operatörü Aşırı Yükleme[] ve () Operatör Aşırı YüklemeTip Dönüşüm OperatörleriÖzet - Matris Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeVariadic ŞablonlarSFINAE ve Type Traits TemelleriÖzet - Generic KonteynerKendi başına pratik yap: Online C++ derleyicisi