مراجعة: دمج السلاسل النصية الديناميكي
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 61 من 63.
التحدي
سهلقم بإنشاء برنامج بلغة C ينفذ وظيفة ربط سلاسل نصية ديناميكية لبناء أداة معالجة نصوص. يجب أن يقوم برنامجك بما يلي:
- كتابة دالة باسم
concatenateStringsتقوم بـ:- تأخذ معاملين من نوع
char*باسمstr1وstr2 - تعيد
char*يشير إلى سلسلة نصية مخصصة ديناميكيًا - تحسب إجمالي الذاكرة المطلوبة لكلا السلسلتين بالإضافة إلى حرف إنهاء السلسلة (null terminator)
- تستخدم
malloc()لتخصيص مقدار الذاكرة المطلوب بالضبط - تتحقق مما إذا كان تخصيص الذاكرة ناجحًا (تعيد NULL إذا فشل التخصيص)
- تستخدم
strcpy()لنسخ السلسلة الأولى إلى الذاكرة المخصصة - تستخدم
strcat()لإلحاق السلسلة الثانية بالنتيجة - تعيد المؤشر إلى السلسلة المترابطة التي تم إنشاؤها حديثًا
- تأخذ معاملين من نوع
- كتابة دالة باسم
processTextتقوم بـ:- تأخذ ثلاثة معاملات من نوع
char*هي:word1، وword2، وseparator - تعيد
char*يشير إلى سلسلة نصية مخصصة ديناميكيًا - تنشئ سلسلة مدمجة بالتنسيق التالي: word1 + separator + word2
- تستدعي أولاً
concatenateStringsلدمجword1وseparator - ثم تستدعي
concatenateStringsمرة أخرى لإلحاقword2بالنتيجة - تقوم بتحرير أي تخصيصات ذاكرة وسيطة بشكل صحيح
- تعيد النتيجة النهائية المترابطة
- تأخذ ثلاثة معاملات من نوع
- في الدالة الرئيسية (main function):
- تصريح عن ثلاث مصفوفات أحرف بحجم 50 لكل منها:
firstWord، وsecondWord، وconnector - قراءة ثلاث سلاسل نصية من المدخلات تمثل الكلمة الأولى، والكلمة الثانية، والرابط (connector)
- استدعاء دالة
processTextباستخدام هذه السلاسل الثلاث - التحقق مما إذا كان المؤشر المعاد ليس NULL
- في حالة النجاح، اطبع النتيجة بهذا التنسيق الدقيق:
Result: [concatenated_string] - إذا فشل تخصيص الذاكرة، اطبع:
Memory allocation failed - حساب وطباعة طول سلسلة النتيجة بهذا التنسيق الدقيق:
Length: [length] - تحرير الذاكرة المخصصة ديناميكيًا
- تصريح عن ثلاث مصفوفات أحرف بحجم 50 لكل منها:
يختبر هذا التحدي إتقانك لتخصيص الذاكرة الديناميكي، ووظائف معالجة السلاسل النصية، وقيم إرجاع المؤشرات، والإدارة السليمة للذاكرة. ستتدرب على حساب متطلبات الذاكرة، واستخدام malloc() و free()، والعمل مع وظائف سلاسل نصية متعددة، ومعالجة إخفاقات تخصيص الذاكرة. يوضح التحدي كيف يسمح التخصيص الديناميكي للدوال بإنشاء وإرجاع بيانات تستمر إلى ما بعد نطاقها.
جرّب بنفسك
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// مهام: اكتب دالة concatenateStrings الخاصة بك هنا
// مهام: اكتب دالة processText الخاصة بك هنا
int main() {
// قراءة المدخلات
char firstWord[50];
char secondWord[50];
char connector[50];
scanf("%s", firstWord);
scanf("%s", secondWord);
scanf("%s", connector);
// مهام: اكتب الكود الخاص بك أدناه
// استدعاء دالة processText والتعامل مع النتيجة
return 0;
}جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية