مراجعة: عداد تكرار الكلمات
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 63 من 63.
التحدي
سهلقم بإنشاء برنامج بلغة C ينفذ عداداً لتردد الكلمات لتحليل النص المدخل. يجب على برنامجك القيام بما يلي:
- كتابة دالة باسم
countWordOccurrencesتقوم بما يلي:- تأخذ معاملين من نوع
char*هما:sentenceوtargetWord - تعيد عدداً صحيحاً يمثل عدد المرات التي ظهرت فيها الكلمة المستهدفة في الجملة
- تستخدم حلقة (loop) لمعالجة الجملة حرفاً بحرف
- تحدد حدود الكلمات باستخدام المسافات كفواصل
- تستخرج كل كلمة من الجملة وتقارنها بالكلمة المستهدفة باستخدام
strcmp() - تحسب التطابقات التامة (مقارنة حساسة لحالة الأحرف)
- تأخذ معاملين من نوع
- كتابة دالة باسم
extractWordتقوم بما يلي:- تأخذ جملة
char*، وعدداً صحيحاًstartIndex، ومعامل كلمةchar* - تعيد عدداً صحيحاً يمثل الفهرس (index) بعد الكلمة المستخرجة
- تستخرج كلمة واحدة تبدأ من
startIndexحتى يتم العثور على مسافة أو علامة نهاية السلسلة (null terminator) - تخزن الكلمة المستخرجة في معامل
word - تضيف علامة نهاية السلسلة (null terminator) لإكمال الكلمة المستخرجة
- تأخذ جملة
- كتابة دالة باسم
analyzeTextتقوم بما يلي:- تأخذ معامل جملة
char* - تعيد عدداً صحيحاً يمثل العدد الإجمالي للكلمات في الجملة
- تحسب الكلمات عن طريق تحديد المسافات كفواصل
- تتعامل مع المسافات المتتالية المتعددة بشكل صحيح (تعتبرها فاصلاً واحداً)
- تأخذ معامل جملة
- في الدالة الرئيسية (main function):
- تصريح عن مصفوفة أحرف
inputSentenceبحجم 200 - تصريح عن مصفوفة أحرف
searchWordبحجم 50 - قراءة جملة من المدخلات (قد تحتوي على كلمات متعددة مفصولة بمسافات)
- قراءة الكلمة المستهدفة للبحث عنها
- استدعاء دالة
analyzeTextوطباعة إجمالي عدد الكلمات بهذا التنسيق الدقيق:Total words: [count] - استدعاء دالة
countWordOccurrencesوطباعة النتيجة بهذا التنسيق الدقيق:Occurrences of '[searchWord]': [count] - حساب وطباعة تردد الكلمة كنسبة مئوية مع منزلة عشرية واحدة بالضبط بهذا التنسيق الدقيق:
Frequency: [percentage]% - تحديد وطباعة فئة التردد:
- إذا كان التردد 0.0%: اطبع
Category: Not found - إذا كان التردد أكبر من 0.0% وأقل من 20.0%: اطبع
Category: Rare - إذا كان التردد بين 20.0% و 50.0% (شاملاً): اطبع
Category: Common - إذا كان التردد أكبر من 50.0%: اطبع
Category: Frequent
- إذا كان التردد 0.0%: اطبع
- تصريح عن مصفوفة أحرف
يختبر هذا التحدي إتقانك لمعالجة السلاسل النصية (string manipulation)، والتقطيع (tokenization)، ومعالجة النصوص. ستتدرب على تقسيم الجمل إلى كلمات فردية، ومقارنة السلاسل النصية للتطابقات التامة، وتنفيذ دوال متعددة تعمل معاً لتحليل بيانات النص. يوضح البرنامج تقنيات معالجة النصوص في العالم الحقيقي والضرورية للعديد من تطبيقات لغة C.
جرّب بنفسك
#include <stdio.h>
#include <string.h>
// TODO: اكتب دالة extractWord هنا
// TODO: اكتب دالة countWordOccurrences هنا
// TODO: اكتب دالة analyzeText هنا
int main() {
char inputSentence[200];
char searchWord[50];
// قراءة جملة الإدخال
fgets(inputSentence, sizeof(inputSentence), stdin);
// إزالة حرف السطر الجديد إذا وجد
inputSentence[strcspn(inputSentence, "\n")] = '\0';
// قراءة كلمة البحث
scanf("%s", searchWord);
// TODO: اكتب الكود الخاص بك أدناه
// استدعاء دالة analyzeText وتخزين إجمالي عدد الكلمات
// استدعاء دالة countWordOccurrences وتخزين عدد مرات التكرار
// حساب النسبة المئوية للتكرار
// تحديد فئة التكرار
// إخراج النتائج بالتنسيق المطلوب
// printf("Total words: %d\n", totalWords);
// printf("Occurrences of '%s': %d\n", searchWord, occurrences);
// printf("Frequency: %.1f%%\n", frequency);
// printf("Category: %s\n", category);
return 0;
}جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية