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

استخدام strcat()

جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 17 من 63.

لقد تعلمت كيفية نسخ السلاسل النصية باستخدام strcpy()، ولكن ماذا لو أردت ضم سلسلتين نصيتين معًا؟ يُسمى هذا الربط، وتوفر لغة C الدالة strcat() من مكتبة <string.h> لهذا الغرض.

تُلحِق الدالة strcat() محتويات string واحدة بنهاية string أخرى. وتأخذ وسيطين: string الوجهة (التي سيتم تعديلها) وstring المصدر (التي ستتم إضافتها إلى النهاية).

#include <stdio.h>
#include <string.h>

char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name);  // greeting الآن يحتوي على "Hello World"

من الضروري أن تحتوي سلسلة الوجهة على مساحة كافية لاستيعاب كلٍّ من المحتوى الأصلي والمحتوى الجديد الذي تتم إضافته. تبحث الدالة strcat() عن المُنهِي الصفري في سلسلة الوجهة، وتزيله، وتنسخ سلسلة المصدر إلى ذلك الموضع، وتضيف مُنهِيًا صفريًا جديدًا في النهاية تمامًا.

أحيانًا تحتاج إلى ربط رقم (مثل 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 now contains "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اختبر نفسك

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

جميع دروس المنطق وتدفق التنفيذ

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