Menu
CoddyTech

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

جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 61 من 63.

challenge icon

التحدي

سهل

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

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

يختبر هذا التحدي إتقانك لتخصيص الذاكرة ديناميكيًا، والتعامل مع السلاسل النصية، والقيم المُعادة للمؤشرات، والإدارة السليمة للذاكرة. ستتدرّب على حساب متطلبات الذاكرة، واستخدام malloc() وfree()، والعمل مع عدة دوال للسلاسل النصية، والتعامل مع حالات فشل تخصيص الذاكرة. يوضّح التحدي كيف يتيح التخصيص الديناميكي للدوال إنشاء بيانات وإعادتها لتظل صالحة بعد انتهاء نطاقها.

جرّب بنفسك

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO: اكتب الدالة concatenateStrings هنا

// TODO: اكتب الدالة processText هنا

int main() {
    // اقرأ المدخلات
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO: اكتب الكود الخاص بك أدناه
    // استدعِ الدالة processText وتعامل مع النتيجة
    
    return 0;
}

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم C عبر الإنترنت