Menu
Coddy logo textTech

סיכום – תדירות מילים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 75 מתוך 104.

challenge icon

אתגר

קל

בואו נבנה מנתח תדירות מילים שמעבד טקסט ומציג ספירות מילים ממוינות לפי תדירות. זו משימת עיבוד טקסט קלאסית שמשלבת את כל רכיבי ה-STL שלמדת: map לספירה, vector למיון, איטרטורים למעבר על הנתונים, ולמבדה ללוגיקת מיון מותאמת אישית.

תארגן את הקוד שלך בשני קבצים:

  • WordAnalyzer.h: הגדר מחלקה בשם WordAnalyzer שמנהלת ספירת מילים וניתוח שלהן.

    המחלקה שלך צריכה להשתמש באופן פנימי ב-std::map<std::string, int> כדי לאחסן ספירות מילים. ממש את המתודות הבאות:

    • addWord(const std::string& word): מגדילה את הספירה של המילה הנתונה
    • getCount(const std::string& word): מחזירה את הספירה של מילה מסוימת (0 אם היא לא נמצאה)
    • getTotalWords(): מחזירה את המספר הכולל של המילים שנוספו (סכום כל הספירות)
    • getUniqueWords(): מחזירה את מספר המילים הייחודיות (גודל המפה)
    • printByFrequency(): מדפיסה את כל המילים ממוינות לפי תדירות בסדר יורד. עבור מילים בעלות אותה תדירות, מיין אותן לפי סדר אלפביתי. בכל שורה יוצג: word: count

    עבור printByFrequency(), תצטרך להעביר את תוכן המפה לווקטור של זוגות, ואז להשתמש ב-std::sort עם למבדה שמשווה תחילה לפי ספירה (בסדר יורד), ואז לפי מילה (בסדר עולה) במקרה של שוויון.

  • main.cpp: קרא מספר שלם n בשורה הראשונה, המציין כמה מילים יופיעו אחריו. לאחר מכן קרא n מילים, אחת בכל שורה.

    צור אובייקט WordAnalyzer, הוסף את כל המילים, ואז הצג:

    1. הדפס Total words: <count>
    2. הדפס Unique words: <count>
    3. הדפס 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 ממוינות לפי סדר אלפביתי, מכיוון שיש להן אותה ספירה.

דוגמה נוספת עם הקלט:

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: הדפיסו "Word frequencies:" וקראו ל-printByFrequency()
    
    return 0;
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C++ אונליין