Menu
Coddy logo textTech

Özet - Kelime Frekansı

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 75 / 104.

challenge icon

Görev

Kolay

Metni 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 bir WordAnalyzer sı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ır
    • getCount(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 ile std::sort kullanmanız gerekir.

  • main.cpp: İlk satırda, ardından kaç kelime geleceğini belirten bir tamsayı n okuyun. Daha sonra her satırda bir kelime olacak şekilde n kelime okuyun.

    Bir WordAnalyzer oluşturun, tüm kelimeleri ekleyin, ardından şunları görüntüleyin:

    1. Total words: <count> yazdırın
    2. Unique words: <count> yazdırın
    3. Word frequencies: yazdırıp ardından printByFrequency() 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: 1

apple 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: 1

Kendin 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

Kendi başına pratik yap: Online C++ derleyicisi