C++ Academy · درس

عداد تكرار الكلمات

احسب عدد مرات ظهور كل كلمة في ملف نصي باستخدام std::map.

الدرس 4 من 414 خطوة

عداد تكرار الكلمات درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

هدف المشروع

اقرؤوا ملفًا نصيًا، واطبعوا كل كلمة فريدة مع عدد مرات ظهورها. هذه مسألة كلاسيكية يمكن حلها بوضوح باستخدام std::map أو std::unordered_map.

الترويسات المطلوبة

نحتاج إلى إدخال وإخراج الملفات، والسلاسل النصية، وحاوية ترابطية.

#include <fstream>
#include <map>
#include <string>
#include <iostream>

قراءة الكلمات واحدةً تلو الأخرى

يقرأ مؤثر الاستخراج >> الرموز المفصولة بالمسافات البيضاء، وهذا مثالي للكلمات الخام.

std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
    counts[word]++;
}

توحيد الكلمات

حوّلوا كل كلمة إلى أحرف صغيرة، بحيث تُحتسب «Hello» و«hello» على أنهما الكلمة نفسها.

#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
    [](unsigned char c) { return std::tolower(c); });

إزالة علامات الترقيم

أزيلوا علامات الترقيم من بداية كل كلمة ونهايتها.

while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();

طباعة الأعداد

كرّروا على الخريطة واطبعوا كل زوج. تكرّر std::map على المفاتيح بترتيب تصاعدي.

for (const auto& [w, n] : counts) {
    std::cout << w << ": " << n << "\n";
}

الترتيب حسب التكرار

لطباعة العناصر حسب التكرار بدلًا من الترتيب الأبجدي، انسخوا الإدخالات إلى متجه ثم رتّبوه.

std::vector<std::pair<std::string, int>> entries(counts.begin(), counts.end());
std::sort(entries.begin(), entries.end(),
    [](auto& a, auto& b) { return a.second > b.second; });

أكثر N شيوعًا

اطبعوا فقط أول 10 إدخالات من المتجه المرتّب، أو أي عدد N تختارونه.

for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
    std::cout << entries[i].first << ": " << entries[i].second << "\n";
}

map في مقابل unordered_map

بالنسبة إلى الملفات الكبيرة، تكون std::unordered_map أسرع في المتوسط، إذ توفر بحثًا بتعقيد O(1)، لكنها تكرّر العناصر بترتيب عشوائي. استخدموا std::map للحصول على مخرجات مرتبة.

الكلمات المتوقفة

رشّحوا الكلمات القصيرة الشائعة مثل «the» و«and» و«of» باستخدام مجموعة من الكلمات المتوقفة.

static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;

عدّ الأسطر أو المحارف

توجد صيغ مختلفة للنمط نفسه: عدّوا إجمالي الأسطر باستخدام std::getline، وإجمالي المحارف باستخدام std::ifstream وstd::istreambuf_iterator.

اعتبارات الأداء

بالنسبة إلى الملفات الضخمة، استخدموا unordered_map مع مفاتيح من نوع string_view، واربِطوا الملف بالذاكرة باستخدام mmap، وتجنّبوا تخصيص الذاكرة من الكومة لكل كلمة.

تحقّق سريع

أي حاوية تكرّر العناصر تلقائيًا بترتيب أبجدي؟

مراجعة

تجمع أداة عدّ تكرار الكلمات بين التدفقات، والسلاسل النصية، والحاويات الترابطية، والخوارزميات. اختاروا map للمخرجات المرتبة، أو unordered_map للسرعة. وحّدوا الصيغة، وأزيلوا علامات الترقيم، وفكّروا في الكلمات المتوقفة للحصول على نتائج أنظف.

البدء مجانًا

تعلم C++ مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

الأسئلة الشائعة

هل درس «عداد تكرار الكلمات» مجاني؟

نعم — نص درس «عداد تكرار الكلمات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «عداد تكرار الكلمات»؟

احسب عدد مرات ظهور كل كلمة في ملف نصي باستخدام std::map. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «عداد تكرار الكلمات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بناء حاسبة بسيطة لسطر الأوامر
  2. قراءة ملفات CSV وكتابتها
  3. لعبة تخمين الأعداد
  4. عداد تكرار الكلمات
← العودة إلى C++ Academy