استخدام 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"هذه الدالة ضرورية لبناء سلاسل نصية أطول من أجزاء أصغر، مثل إنشاء جمل كاملة من كلمات فردية أو دمج إدخال المستخدم مع نص محدد مسبقًا.
التحدي
سهلاكتب برنامجًا بلغة 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;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسيةتدرّب بنفسك: مترجم C عبر الإنترنت