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

استخدام 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"

تعد هذه الدالة أساسية لبناء سلاسل نصية أطول من قطع أصغر، مثل إنشاء جمل كاملة من كلمات فردية أو دمج مدخلات المستخدم مع نص محدد مسبقاً.

challenge icon

التحدي

سهل

اكتب برنامجاً بلغة C يوضح عملية دمج السلاسل النصية باستخدام دالة strcat() لبناء رسائل مخصصة. يجب على برنامجك القيام بما يلي:

  1. قراءة عدد صحيح n يمثل عدد الأشخاص الذين سيتم معالجتهم
  2. لكل شخص:
    • قراءة الاسم الأول من المدخلات
    • قراءة اسم العائلة من المدخلات
    • إنشاء مصفوفة أحرف باسم fullName تحتوي على 100 عنصر
    • استخدام strcpy() لنسخ الاسم الأول إلى fullName
    • استخدام strcat() لإلحاق مسافة واحدة " " بـ fullName
    • استخدام strcat() لإلحاق اسم العائلة بـ fullName
    • إنشاء مصفوفة أحرف باسم greeting تحتوي على 150 عنصراً
    • استخدام strcpy() لنسخ "Hello, " إلى greeting
    • استخدام strcat() لإلحاق fullName بـ greeting
    • استخدام strcat() لإلحاق "! Welcome to our program." بـ greeting
    • طباعة رسالة الترحيب النهائية
  3. بعد معالجة جميع الأشخاص، قم بإنشاء رسالة ملخص:
    • إنشاء مصفوفة أحرف باسم 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;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow