Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة: دمج السلاسل النصية الديناميكي

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 61 من 63.

challenge icon

التحدي

سهل

قم بإنشاء برنامج بلغة C ينفذ وظيفة ربط سلاسل نصية ديناميكية لبناء أداة معالجة نصوص. يجب أن يقوم برنامجك بما يلي:

  1. كتابة دالة باسم concatenateStrings تقوم بـ:
    • تأخذ معاملين من نوع char* باسم str1 و str2
    • تعيد char* يشير إلى سلسلة نصية مخصصة ديناميكيًا
    • تحسب إجمالي الذاكرة المطلوبة لكلا السلسلتين بالإضافة إلى حرف إنهاء السلسلة (null terminator)
    • تستخدم malloc() لتخصيص مقدار الذاكرة المطلوب بالضبط
    • تتحقق مما إذا كان تخصيص الذاكرة ناجحًا (تعيد NULL إذا فشل التخصيص)
    • تستخدم strcpy() لنسخ السلسلة الأولى إلى الذاكرة المخصصة
    • تستخدم strcat() لإلحاق السلسلة الثانية بالنتيجة
    • تعيد المؤشر إلى السلسلة المترابطة التي تم إنشاؤها حديثًا
  2. كتابة دالة باسم processText تقوم بـ:
    • تأخذ ثلاثة معاملات من نوع char* هي: word1، و word2، و separator
    • تعيد char* يشير إلى سلسلة نصية مخصصة ديناميكيًا
    • تنشئ سلسلة مدمجة بالتنسيق التالي: word1 + separator + word2
    • تستدعي أولاً concatenateStrings لدمج word1 و separator
    • ثم تستدعي concatenateStrings مرة أخرى لإلحاق word2 بالنتيجة
    • تقوم بتحرير أي تخصيصات ذاكرة وسيطة بشكل صحيح
    • تعيد النتيجة النهائية المترابطة
  3. في الدالة الرئيسية (main function):
    • تصريح عن ثلاث مصفوفات أحرف بحجم 50 لكل منها: firstWord، و secondWord، و connector
    • قراءة ثلاث سلاسل نصية من المدخلات تمثل الكلمة الأولى، والكلمة الثانية، والرابط (connector)
    • استدعاء دالة processText باستخدام هذه السلاسل الثلاث
    • التحقق مما إذا كان المؤشر المعاد ليس NULL
    • في حالة النجاح، اطبع النتيجة بهذا التنسيق الدقيق: Result: [concatenated_string]
    • إذا فشل تخصيص الذاكرة، اطبع: Memory allocation failed
    • حساب وطباعة طول سلسلة النتيجة بهذا التنسيق الدقيق: Length: [length]
    • تحرير الذاكرة المخصصة ديناميكيًا

يختبر هذا التحدي إتقانك لتخصيص الذاكرة الديناميكي، ووظائف معالجة السلاسل النصية، وقيم إرجاع المؤشرات، والإدارة السليمة للذاكرة. ستتدرب على حساب متطلبات الذاكرة، واستخدام 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