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

مراجعة: String Wrapper

جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 16 من 61.

challenge icon

التحدي

سهل

لنبنِ وحدة StringObject تغلّف مصفوفة محارف مخصّصة ديناميكيًا. يجمع هذا التحدي للمراجعة دورة حياة الكائن الكاملة، وconstructor، وread-only method، وdestructor، بحيث تعمل جميعها معًا لإدارة memory بأمان.

ستُنشئ ثلاثة ملفات:

  • stringobj.h: استخدم Declare لبنية StringObject ذات member واحد: char *text (وهو pointer إلى string مخصّصة ديناميكيًا). استخدم Declare أيضًا لثلاث function:
    • create_string: تستقبل const char * كـ input وتُعيد pointer إلى StringObject مخصّصة حديثًا
    • print_string: تستقبل const StringObject * وتعرض النص المخزّن
    • free_string: تستقبل StringObject * وتحرّر كل memory المخصّصة
    استخدم include guards بالرمز STRINGOBJ_H.
  • stringobj.c: استخدم Implement لكل function من الثلاث. يجب أن يخصّص constructor memory للبنية، ثم يخصّص memory للنص (تذكّر strlen مضافًا إليه واحد لمحرف الإنهاء null)، وأن ينسخ input string. يجب أن يحرّر destructor بترتيب عكسي: مخزن text الداخلي أولًا، ثم البنية نفسها. أضف فحص NULL في destructor من أجل safety.
  • main.c: استخدم وحدتك لإنشاء كائن string، وعرض محتوياته، ثم إجراء التنظيف بصورة صحيحة.

ستتلقى input واحدًا: text string لتخزينه في StringObject.

في ملفك الرئيسي، أنشئ StringObject باستخدام النص المُ provided، واعرض محتوياته، وحرّر memory، ثم اطبع رسالة تأكيد.

يجب أن تُخرج print_string بالتنسيق التالي:

Text: {text}

بعد التحرير، اطبع:

Freed

على سبيل المثال، مع input هو Hello World، سيكون الناتج:

Text: Hello World
Freed

تنسيق الناتج المطلوب:

[المحتوى المترجم هنا]

جرّب بنفسك

#include <stdio.h>
#include "stringobj.h"

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // إزالة السطر الجديد إن وُجد
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Create a StringObject with the input text
    
    // TODO: اطبع السلسلة باستخدام print_string
    
    // TODO: Free the StringObject using free_string
    
    // TODO: اطبع "Freed" لتأكيد التنظيف
    
    return 0;
}

جميع دروس البرمجة كائنية التوجه

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