مراجعة: دمج السلاسل النصية الديناميكي
جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 61 من 63.
التحدي
سهلأنشئ برنامجًا بلغة C ينفّذ دالة لدمج السلاسل النصية ديناميكيًا لبناء أداة لمعالجة النصوص. ينبغي أن يقوم برنامجك بما يلي:
- اكتب دالة باسم
concatenateStringsتقوم بما يلي:- تأخذ وسيطين من النوع
char*باسمَيstr1وstr2 - تعيد
char*يشير إلى سلسلة نصية مخصّصة ديناميكيًا - تحسب إجمالي الذاكرة المطلوبة لكلتا السلسلتين بالإضافة إلى المحرف الصفري الختامي
- تستخدم
malloc()لتخصيص مقدار الذاكرة المطلوب بالضبط - تتحقق من نجاح تخصيص الذاكرة (تعيد NULL إذا فشل التخصيص)
- تستخدم
strcpy()لنسخ السلسلة الأولى إلى الذاكرة المخصّصة - تستخدم
strcat()لإلحاق السلسلة الثانية بالنتيجة - تعيد المؤشر إلى السلسلة المدمجة التي أُنشئت حديثًا
- تأخذ وسيطين من النوع
- اكتب دالة باسم
processTextتقوم بما يلي:- تأخذ ثلاثة وسائط من النوع
char*:word1وword2وseparator - تعيد
char*يشير إلى سلسلة نصية مخصّصة ديناميكيًا - تنشئ سلسلة مدمجة بالتنسيق: word1 + separator + word2
- تستدعي أولًا
concatenateStringsلدمجword1وseparator - ثم تستدعي
concatenateStringsمرة أخرى لإلحاقword2بالنتيجة - تحرر أي تخصيصات وسيطة للذاكرة بطريقة صحيحة
- تعيد النتيجة النهائية المدمجة
- تأخذ ثلاثة وسائط من النوع
- في الدالة main:
- صرّح عن ثلاثة مصفوفات محارف، حجم كل منها 50:
firstWordوsecondWordوconnector - اقرأ ثلاث سلاسل نصية من الإدخال تمثل الكلمة الأولى والكلمة الثانية والموصّل
- استدعِ الدالة
processTextباستخدام هذه السلاسل النصية الثلاث - تحقق مما إذا كان المؤشر المُعاد لا يساوي NULL
- إذا نجحت العملية، اطبع النتيجة بهذا التنسيق الدقيق:
Result: [concatenated_string] - إذا فشل تخصيص الذاكرة، اطبع:
Memory allocation failed - احسب طول سلسلة النتيجة واطبعه بهذا التنسيق الدقيق:
Length: [length] - حرر الذاكرة المخصّصة ديناميكيًا
- صرّح عن ثلاثة مصفوفات محارف، حجم كل منها 50:
يختبر هذا التحدي إتقانك لتخصيص الذاكرة ديناميكيًا، والتعامل مع السلاسل النصية، والقيم المُعادة للمؤشرات، والإدارة السليمة للذاكرة. ستتدرّب على حساب متطلبات الذاكرة، واستخدام 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;
}جميع دروس المنطق وتدفق التنفيذ
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسيةتدرّب بنفسك: مترجم C عبر الإنترنت