السلاسل النصية كمصفوفات char
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 12 من 63.
في لغة C، لا يوجد نوع بيانات نصي (string) مدمج كما قد تجد في لغات البرمجة الأخرى. بدلاً من ذلك، يتم تمثيل النصوص كـ مصفوفات من الأحرف. هذا المفهوم الأساسي ضروري لفهم كيفية التعامل مع النصوص في برمجة C.
السلسلة النصية (string) في لغة C هي ببساطة تسلسل من الأحرف المخزنة في مواقع ذاكرة متتالية. لإنشاء سلسلة نصية، تقوم بالتصريح عن مصفوفة أحرف (character array) كبيرة بما يكفي لاستيعاب جميع الأحرف التي تحتاجها، بالإضافة إلى مساحة إضافية واحدة لحرف إنهاء خاص.
char greeting[6]; // يمكنه استيعاب 5 أحرف + المنتهي
char message[20]; // يمكنه استيعاب ما يصل إلى 19 حرفاً + المنتهيالطريقة الأكثر ملاءمة للتعامل مع السلاسل النصية هي تهيئتها مباشرة باستخدام ثابت نصي (string literal) عند التصريح عن المصفوفة. تتولى لغة C تلقائيًا تفاصيل تخزين كل حرف في المصفوفة:
char greeting[6] = "Hello";
// هذا يخزن: 'H', 'e', 'l', 'l', 'o'، بالإضافة إلى حرف إنهاء خاصيمكنك أيضاً جعل لغة C تحدد حجم المصفوفة تلقائياً عن طريق حذف تحديد الحجم عند التهيئة باستخدام سلسلة نصية ثابتة (string literal):
char greeting[] = "Hello"; // تجعل لغة C هذا الحجم 6 تلقائياًإن فهم أن السلاسل النصية (strings) هي مصفوفات من الأحرف أمر بالغ الأهمية لأنه يوضح كيفية تعامل لغة C مع البيانات النصية ويهيئك للعمل مع دوال معالجة السلاسل النصية التي تعمل على هذه المصفوفات من الأحرف.
التحدي
سهلاكتب برنامجاً بلغة C يوضح كيفية إنشاء والتعامل مع مصفوفات الأحرف لتخزين السلاسل النصية. يجب على برنامجك القيام بما يلي:
- الإعلان عن مصفوفة أحرف تسمى
greetingبمساحة كافية لاستيعاب السلسلة النصية "Hello" (تذكر مراعاة حرف الإنهاء الصفري null terminator) - تهيئة مصفوفة
greetingبالقيمة النصية "Hello" - الإعلان عن مصفوفة أحرف ثانية تسمى
messageتحتوي على 20 عنصراً - تهيئة مصفوفة
messageبالقيمة النصية "Welcome" - الإعلان عن مصفوفة أحرف ثالثة تسمى
wordدون تحديد الحجم، وترك لغة C تحدد الحجم تلقائياً عن طريق تهيئتها بالقيمة "Programming" - طباعة السلاسل الثلاث جميعاً باستخدام
printfمع محدد التنسيق%s - طباعة حجم كل مصفوفة باستخدام
sizeofلتوضيح مقدار الذاكرة التي تشغلها كل مصفوفة أحرف
يجب أن يعرض مخرج البرنامج النتائج بالتنسيق التالي:
greeting: Hello
message: Welcome
word: Programming
Size of greeting: 6
Size of message: 20
Size of word: 12يختبر هذا التحدي فهمك لكيفية الإعلان عن مصفوفات الأحرف لتخزين السلاسل النصية، وكيف يتم إنهاء السلاسل النصية تلقائياً بحرف صفري عند تعيينها لمصفوفات الأحرف، وكيف تحسب لغة C أحجام المصفوفات تلقائياً عندما تحذف تحديد الحجم أثناء التهيئة.
ورقة مرجعية
في لغة C، يتم تمثيل السلاسل النصية كـ مصفوفات من الأحرف. لا يوجد نوع بيانات مدمج للسلاسل النصية.
التصريح عن مصفوفة أحرف بحجم محدد:
char greeting[6]; // يمكنها استيعاب 5 أحرف + المنتهي
char message[20]; // يمكنها استيعاب ما يصل إلى 19 حرفاً + المنتهيالتهيئة باستخدام سلسلة نصية ثابتة:
char greeting[6] = "Hello";
// هذا يخزن: 'H', 'e', 'l', 'l', 'o'، بالإضافة إلى منتهي خاصدع لغة C تحدد حجم المصفوفة تلقائياً:
char greeting[] = "Hello"; // تجعل لغة C هذا الحجم 6 تلقائياًطباعة السلاسل النصية باستخدام محدد التنسيق %s:
printf("%s", greeting);الحصول على حجم المصفوفة باستخدام sizeof:
sizeof(greeting) // يعيد إجمالي البايتات التي تشغلها المصفوفةجرّب بنفسك
#include <stdio.h>
int main() {
// TODO: اكتب كودك هنا
// قم بتعريف وتهيئة مصفوفات الأحرف كما هو محدد في التحدي
// طباعة السلاسل النصية وأحجامها
printf("greeting: %s\n", greeting);
printf("message: %s\n", message);
printf("word: %s\n", word);
printf("Size of greeting: %lu\n", sizeof(greeting));
printf("Size of message: %lu\n", sizeof(message));
printf("Size of word: %lu\n", sizeof(word));
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية