استخدام strcat()
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 17 من 63.
لقد تعلمت كيفية نسخ السلاسل النصية باستخدام strcpy()، ولكن ماذا لو كنت تريد دمج سلسلتين نصيتين معاً؟ يُسمى هذا الدمج (concatenation)، وتوفر لغة C دالة strcat() من مكتبة <string.h> لهذا الغرض.
تقوم الدالة strcat() بإلحاق محتويات سلسلة نصية واحدة بنهاية سلسلة نصية أخرى. وهي تأخذ وسيطين: السلسلة النصية الوجهة (التي سيتم تعديلها) والسلسلة النصية المصدر (التي ستتم إضافتها إلى النهاية).
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // تحتوي greeting الآن على "Hello World"من الضروري أن تحتوي السلسلة النصية الوجهة (destination string) على مساحة كافية لاستيعاب كل من المحتوى الأصلي والمحتوى الجديد الذي يتم إلحاقه. تبحث الدالة strcat() عن النهاية الصفرية (null terminator) في السلسلة النصية الوجهة، وتقوم بإزالتها، ثم تنسخ السلسلة النصية المصدر (source string) إلى ذلك الموقع، وتضيف نهاية صفرية جديدة في النهاية تماماً.
في بعض الأحيان تحتاج إلى دمج رقم (مثل int) مع سلسلة نصية. بما أن strcat() تعمل فقط مع مصفوفات الأحرف، فأنت بحاجة أولاً إلى تحويل الرقم إلى سلسلة نصية. يمكنك القيام بذلك باستخدام sprintf()، والتي تعمل تماماً مثل printf() ولكنها تكتب النتيجة المنسقة في مصفوفة أحرف بدلاً من طباعتها على الشاشة. تعد sprintf() جزءاً من <stdio.h>، المضمنة بالفعل في معظم برامج C.
int n = 42;
char numStr[20];
sprintf(numStr, "%d", n); // numStr تحتوي الآن على "42" كسلسلة نصيةبمجرد تخزين الرقم كسلسلة نصية في numStr، يمكنك استخدام strcat() لإلحاقه بسلسلة نصية أخرى كالمعتاد:
char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr); // يحتوي summary الآن على "Total people processed: 3"تعد هذه الدالة أساسية لبناء سلاسل نصية أطول من قطع أصغر، مثل إنشاء جمل كاملة من كلمات فردية أو دمج مدخلات المستخدم مع نص محدد مسبقاً.
التحدي
سهلاكتب برنامجاً بلغة C يوضح عملية دمج السلاسل النصية باستخدام دالة strcat() لبناء رسائل مخصصة. يجب على برنامجك القيام بما يلي:
- قراءة عدد صحيح
nيمثل عدد الأشخاص الذين سيتم معالجتهم - لكل شخص:
- قراءة الاسم الأول من المدخلات
- قراءة اسم العائلة من المدخلات
- إنشاء مصفوفة أحرف باسم
fullNameتحتوي على 100 عنصر - استخدام
strcpy()لنسخ الاسم الأول إلىfullName - استخدام
strcat()لإلحاق مسافة واحدة " " بـfullName - استخدام
strcat()لإلحاق اسم العائلة بـfullName - إنشاء مصفوفة أحرف باسم
greetingتحتوي على 150 عنصراً - استخدام
strcpy()لنسخ "Hello, " إلىgreeting - استخدام
strcat()لإلحاقfullNameبـgreeting - استخدام
strcat()لإلحاق "! Welcome to our program." بـgreeting - طباعة رسالة الترحيب النهائية
- بعد معالجة جميع الأشخاص، قم بإنشاء رسالة ملخص:
- إنشاء مصفوفة أحرف باسم
summaryتحتوي على 100 عنصر - استخدام
strcpy()لنسخ "Total people processed: " إلىsummary - تحويل الرقم
nإلى سلسلة نصية واستخدامstrcat()لإلحاقه بـsummary - طباعة رسالة الملخص
- إنشاء مصفوفة أحرف باسم
تذكر تضمين الترويسة <string.h> لاستخدام دوال السلاسل النصية.
يجب أن يعرض مخرجك النتائج بالتنسيق التالي:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]على سبيل المثال، إذا كانت المدخلات هي:
2
John
Doe
Alice
Smithيجب أن يكون مخرجك:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2يختبر هذا التحدي فهمك لاستخدام strcat() لدمج سلاسل نصية متعددة معاً، ودمجها مع strcpy() لإعداد السلسلة النصية الأولية، وبناء سلاسل نصية معقدة من مكونات متعددة خطوة بخطوة.
جرّب بنفسك
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// قراءة عدد الأشخاص
int n;
scanf("%d", &n);
// TODO: اكتب كودك بالأسفل
// معالجة كل شخص وإنشاء رسائل ترحيب
// ثم إنشاء وعرض رسالة الملخص
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية