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 Analizörü (Word Frequency Analyzer) oluşturalım. Bu, öğrendiğiniz tüm STL bileşenlerini bir araya getiren klasik bir metin işleme görevidir: sayma için map, sıralama için vector, gezinme için yineleyiciler (iterators) ve özel sıralama mantığı için lambdalar.

Kodunuzu iki dosya halinde 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ı saklamak için dahili olarak 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 azalan frekans sırasına göre yazdırır. Aynı frekansa sahip kelimeler için alfabetik olarak sıralayın. Her satır şu formatta olmalıdır: word: count

    printByFrequency() için, map içeriğini bir pair vektörüne aktarmanız, ardından önce sayıya göre (azalan), sonra eşitlik durumunda kelimeye göre (artan) karşılaştırma yapan bir lambda ile std::sort kullanmanız gerekecektir.

  • main.cpp: İlk satırda kaç kelimenin takip edeceğini belirten bir n tam sayısı okuyun. Ardından her satırda bir tane olacak şekilde n kelime okuyun.

    Bir WordAnalyzer oluşturun, tüm kelimeleri ekleyin ve 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ın ve ardından printByFrequency() metodunu çağırın

Örneğin, şu girdi ile:

7
apple
banana
apple
cherry
banana
apple
date

Çıktı şöyle olmalıdır:

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

apple kelimesinin nasıl ilk sırada (en yüksek frekans) göründüğüne, ardından banana geldiğine, sonra cherry ve date kelimelerinin aynı sayıya sahip oldukları için alfabetik olarak sıralandığına dikkat edin.

Girdi ile 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: "Word frequencies:" yazdır ve printByFrequency() fonksiyonunu çağır
    
    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler