סיכום – תדירות מילים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 75 מתוך 104.
אתגר
קלבואו נבנה מנתח תדירות מילים שמעבד טקסט ומציג ספירות מילים ממוינות לפי תדירות. זו משימת עיבוד טקסט קלאסית שמשלבת את כל רכיבי ה-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, הוסף את כל המילים, ואז הצג:- הדפס
Total words: <count> - הדפס
Unique words: <count> - הדפס
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;
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות OOP
קבצים חיצונייםבנייה וקומפילציה של C++קובצי Header וקובצי מקורמרחבי שמות והיקףמבוא ל-OOP ב-C++מחלקות לעומת אובייקטיםמצביע thisמתודות (פונקציות איבר)תכונות (חברי נתונים)יסודות הבנאים וההורסיםסיכום – מחשבון פשוט4מאפייני מחלקה
חברי מופע לעומת חברים סטטייםגטרים וסטריםפונקציות איבר קבועותמילת המפתח mutableמתודות ומשתנים סטטייםפונקציות ומחלקות ידידותסיכום – מנהל חשבונות בנק7ירושה
ירושה בסיסיתרמות גישה בירושהסדר הקריאות לבנאי ולמפרקדריסת מתודותפונקציות וירטואליות ו־VTableירושה מרובהירושה וירטואליתסיכום – היררכיית עובדים10סקירה כללית של STL
סקירה כללית והפילוסופיה של STLקונטיינרים של STLאיטרטוריםאלגוריתמים של STLפונקטורים וביטויי למבדהסיכום – תדירות מילים2ניהול זיכרון
זיכרון Stack לעומת Heapמצביעים והפניותזיכרון דינמי (new/delete)מצביעים חכמים ב-C++RAII ב-C++סיכום – מנהל מערכים דינמיים5כימוס
מצייני גישה ב-C++מצייני גישה לעומקהסתרת מידעמבנה לעומת מחלקהמחלקות מקוננות ופנימיותסיכום – מערכת רשומות תלמידים8רב־צורתיות
רב־צורתיות בזמן קומפילציה לעומת בזמן ריצההעמסת פונקציותפונקציות וירטואליות — מבט נוסףפונקציות וירטואליות טהורותמחלקות מופשטותתכנון ממשקים ב־C++המרה דינמית ו־RTTIסיכום — מחשבון צורות3בנאים והורסים
בנאי ברירת מחדלבנאי עם פרמטריםבנאי העתקהבנאי העברהרשימות אתחול בבנאיםבנאים מאציליםמעמיקים בנושא הורסיםכלל השלושה / החמישה / האפססיכום – מחלקת String6העמסת אופרטורים
מבוא להעמסת אופרטוריםהעמסת אופרטורים אריתמטייםהעמסת אופרטורי השוואהאופרטורי זרםהעמסת אופרטור השמההעמסת האופרטורים [] ו־()אופרטורים להמרת טיפוסיםסיכום – מחלקת Matrix9תבניות
תבניות פונקציהתבניות מחלקההתמחות תבניותתבניות ארגומנטים משתנותיסודות SFINAE ותכונות טיפוסיםסיכום – מכל גנריתרגלו בעצמכם: קומפיילר C++ אונליין