Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - تكرار الكلمات

جزء من قسم البرمجة كائنية التوجه في رحلة C++ على Coddy. الدرس 75 من 104.

challenge icon

التحدي

سهل

لنبنِ محلّل تكرار الكلمات الذي يعالج النص ويعرض أعداد الكلمات مرتبةً حسب التكرار. هذه مهمة كلاسيكية لمعالجة النصوص تجمع كل مكوّنات STL التي تعلمتها: map للعدّ، وvector للترتيب، والمكرّرات للتنقّل، وlambda لمنطق الترتيب المخصّص.

ستنظّم شفرتك عبر ملفّين:

  • WordAnalyzer.h: عرّف فئة WordAnalyzer تدير عدّ الكلمات وتحليلها.

    يجب أن تستخدم فئتك std::map<std::string, int> داخليًا لتخزين أعداد الكلمات. Implement هذه الدوال:

    • addWord(const std::string& word): تزيد العدد للكلمة given
    • getCount(const std::string& word): تُرجع العدد لكلمة محددة (0 إذا لم يتم العثور عليها)
    • getTotalWords(): تُرجع العدد الإجمالي للكلمات added (مجموع جميع الأعداد)
    • getUniqueWords(): تُرجع عدد الكلمات الفريدة (حجم الخريطة)
    • printByFrequency(): تطبع جميع الكلمات مرتبةً حسب التكرار بترتيب descending. بالنسبة إلى الكلمات ذات التكرار نفسه، رتّبها alphabetically. يجب أن يعرض كل سطر: word: count

    بالنسبة إلى printByFrequency()، ستحتاج إلى نقل map contents إلى vector من pairs، ثم استخدام std::sort مع lambda تقارن حسب count أولًا (descending)، ثم حسب الكلمة (ascending) عند التعادل.

  • main.cpp: Read عددًا صحيحًا n في السطر الأول يحدد عدد الكلمات التي ستتبع. ثم Read عدد n من الكلمات، كلمةً واحدةً في كل سطر.

    أنشئ WordAnalyzer، وأضف جميع الكلمات، ثم اعرض:

    1. Print Total words: <count>
    2. Print Unique words: <count>
    3. Print Word frequencies: متبوعًا باستدعاء printByFrequency()

على سبيل المثال، مع الإدخال:

7
apple
banana
apple
cherry
banana
apple
date

يجب أن يكون الناتج:

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

لاحظ أن apple تظهر أولًا (أعلى تكرار)، تليها banana، ثم تُرتّب cherry وdate alphabetically لأن لهما العدد نفسه.

مثال آخر مع الإدخال:

5
the
cat
the
sat
the

الناتج:

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

جرّب بنفسك

#include <iostream>
#include <string>
#include "WordAnalyzer.h"

using namespace std;

int main() {
    int n;
    cin >> n;
    
    WordAnalyzer analyzer;
    
    // TODO: اقرأ n كلمات وأضفها إلى analyzer
    
    // TODO: اطبع "Total words: <count>"
    
    // TODO: اطبع "Unique words: <count>"
    
    // TODO: Print "Word frequencies:" and call printByFrequency()
    
    return 0;
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C++ عبر الإنترنت