وظيفة مكتبة C القياسية المستخدمة لسلسلة السلسلة هي strcat ().
نموذج الوظيفة:
$شار * سترات (شارع 1وstr2)؛حيث str1 هي السلسلة الأولى و str2 هي السلسلة الثانية. القيمة المرجعة للدالة هي المؤشر إلى السلسلة المتسلسلة.
الآن ، بمساعدة المثال ، سنرى كيف يتم تنفيذ التسلسل.
مثال 1:
$ سترات (شارع 1وstr2)؛حيث str1 هو بيلا
str2 هو ويتمان
بعد تسلسل السلسلةوستكون السلسلة الأولى
str1 بيلا ويتمان
str2 ويتمان
بينما ستبقى سلسلة 2 كما هي.
المثال 2:
$ سترات (str2وشارع 1)؛حيث str1 هو بيلا
str2 هو ويتمان
بعد تسلسل السلسلةوستكون السلسلة المتسلسلة
str1 بيلا
str2 بيلا ويتمان
بينما ستبقى سلسلة 1 كما هي.
الإعلان في ملف الرأس C
يتم التصريح عن وظائف معالجة السلسلة ضمن headerfile. إذا أراد المرء استخدام الوظيفة القياسية للتسلسل ، فيجب تضمين ملف الرأس هذا.
وبالتالي ، يمكننا تحقيق تسلسل السلسلة بطريقتين. أحدهما باستخدام وظيفة مكتبة C القياسية والآخر بدون استخدام وظيفة مكتبة C. فيما يلي أمثلة على البرامج لتوضيح كلا الطريقتين. يمكن تنفيذ تسلسل السلسلة بدون استخدام وظيفة مكتبة C بطرق متعددة.
سنناقش ذلك أيضًا في الأقسام القادمة مع مثال.
تسلسل سلسلتين باستخدام وظيفة مكتبة C.
#يشمل#يشمل
#define BUF_SIZE 256
intالأساسية()
{
شارS1[BUF_SIZE]وS2[BUF_SIZE]؛ / * اثنان من مخازن السلسلة * /
printf (أدخل السلسلة الأولىن')؛ ] / * طباعة رسالة إلى وحدة التحكم للمستخدم لإدخال السلسلة الأولى * /
fgets (S1وBUF_SIZEوستدين)؛ / * تخزين سلسلة إدخال المستخدم في المخزن المؤقت S1 * /
S1[ سترلين (S1)-1] = ' 0'؛
printf (أدخل السلسلة الثانيةن')؛/ * طباعة رسالة للمستخدم لإدخال السلسلة الثانية * /
fgets (S2وBUF_SIZEوستدين)؛ / * تخزين سلسلة إدخال المستخدم في المخزن المؤقت S2 * /
S2[ سترلين (S2)-1] = ' 0'؛
سترات (S1وS2)؛ / * استدعاء الوظيفة القياسية مع سلاسل S1 و S2 * /
printf ('نالسلسلة المتسلسلة هي٪ sنن'وS1)؛ / * الإخراج: يتم إلحاق S1 بـ S2 * /
إرجاع 0؛
}
لقطات من البرنامج والمخرجات:
تسلسل سلسلتين بدون استخدام وظيفة المكتبة
استخدام حلقة for لنسخ السلسلة الثانية في نهاية السلسلة الأولى.
#يشمل#يشمل
#define BUF_SIZE 256
intالأساسية()
{
شارS1[BUF_SIZE]وS2[BUF_SIZE]؛ / * قم بتعريف المخازن المؤقتة S1 ، S2 لكل من السلسلة * /
intالطول= 0وأناوي؛ / * المتغيرات المطلوبة لاجتياز الحلقة * /
printf ('أدخل السلسلة الأولى')؛ / * اطبع رسالة المستخدم لإدخال السلسلة الأولى * /
fgets (S1وBUF_SIZEوستدين)؛ / * سيتم تخزين سلسلة إدخال المستخدم في S1 * /
S1[ سترلين (S1)-1] = ' 0'؛
printf ('أدخل السلسلة الثانية')؛ / * اطبع رسالة المستخدم لإدخال السلسلة الثانية * /
fgets (S2وBUF_SIZEوستدين)؛ / * سيتم تخزين سلسلة إدخال المستخدم في S2 * /
S2[ سترلين (S2)-1] = ' 0'؛
/ * اجتياز السلسلة الأولى للعثور على طول S1 * /
ل(أنا=0؛S1[أنا]! =' 0'؛أنا++)
{
الطول=الطول+1؛
}
/ * سيحتوي الطول على نهاية S1 ، ابدأ من الطول ونسخ S2 بالكامل إلى S1 * /
ل(أنا=الطولوي=0؛S2[ي]! =' 0'؛أنا++ ،ي++)
{
S1[أنا]=S2[ي]؛
S1[أنا]=' 0'؛
}
/ * طباعة S1 ، نتيجة متسلسلة * /
printf ('نالسلسلة المتسلسلة هي٪ sنن'وS1)؛
إرجاع 0؛
}
لقطات من البرنامج والمخرجات:
طريقة أخرى بدون وظيفة المكتبة
التسلسل باستخدام العودية:
ستُستخدم الدالة stringconcatenate () للحصول على طول السلسلة 1. إذا كانت S2 فارغة ، فسيتم تخصيص حرف فارغ لـ S2.
إذا لم يتم تعيين حرف فارغ لـ S2 من إضافة عنصر S2 في نهاية S1 وهو S1 [i + j] = S2 [j] ، فإن هذا يزيد من قيمة i في السلسلة.
سيتم استدعاء الوظيفة نفسها عن طريق تمرير السلاسل التي تم إصلاحها (S1 ، S2) كوسيطة. سيتم استدعاؤه مرارًا وتكرارًا حتى يصبح S2 فارغًا.
ستتم طباعة سلسلة S1 المتسلسلة بواسطة main () كـ
#يشمل#يشمل
#define BUF_SIZE 256
/ * وظيفة تكرارية لتنفيذ تسلسل السلسلة وفقًا للوصف أعلاه * /
فارغسلسلة(شار *S1وشار *S2)
{
ثابتة intأنا=0؛
ثابتة intي؛
ي= سترلين (S1)؛
لو(!S2[أنا])
{
S2[أنا]=' 0'؛
}
آخر
{
S1[ي] =S2[أنا]؛
S1[ي+1] = ' 0'؛
أنا++ ؛
سلسلة(S1وS2)؛
}
}
intالأساسية()
{
شارS1[BUF_SIZE]وS2[BUF_SIZE]؛
printf ('أدخل قيمة السلسلة الأولى:')؛ / * رسالة المستخدم لإدخال السلسلة الأولى * /
fgets (S1وBUF_SIZEوستدين)؛ / * سلسلة إدخال المستخدم الأولى ، تخزينها في S1 * /
S1[ سترلين (S1)-1] = ' 0'؛
printf ('أدخل قيمة السلسلة الثانية:')؛ / * رسالة المستخدم لإدخال السلسلة الثانية * /
fgets (S2وBUF_SIZEوستدين)؛ / * سلسلة إدخال المستخدم الأولى ، تخزينها في S2 * /
S2[ سترلين (S2)-1] = ' 0'؛
سلسلة(S1وS2)؛ / * استدعاء الوظيفة مع S1 ، S2 كمعلمات * /
printf ('تركيبة السلاسل ='٪ s 'ن'وS1)؛
إرجاع 0؛
}
لقطات من البرنامج والمخرجات:
التسلسل باستخدام الوظائف
يتم استدعاء الدالة strconcatenate () بواسطة main () للجمع بين سلسلتين.
تحصل الدالة على طول السلسلة 1 باستخدام stringlen (string1).
قم بربط عناصر السلسلة 2 [i] في السلسلة 1 [i + j]. ستتكرر هذه الخطوة حتى تصبح السلسلة فارغة. هنا ، نقوم بضم السلسلة 2 إلى السلسلة 1 في نهاية السلسلة 1.
سيتم استلام السلسلة المتسلسلة (السلسلة 1) في النهاية عندما يتم تنفيذ جميع التكرارات في حلقة for.
يقوم main () بطباعة السلسلة المتسلسلة S1
#يشمل#يشمل
#define BUF_SIZE 256
/ * وظيفة لتنفيذ تسلسل السلسلة وفقًا للوصف أعلاه * /
فارغستركونكاتيناتي(شار *سلسلة 1و شار*سلسلة 2)
{
intأنا؛
intي= سترلين (سلسلة 1)؛
ل(أنا=0؛سلسلة2[أنا]؛أنا++)
{
سلسلة 1[أنا+ي]=سلسلة 2[أنا]؛
}
سلسلة 1[أنا+ي]= ' 0'؛
}
intالأساسية()
{
شارسلسلة 1[BUF_SIZE]وسلسلة 2[BUF_SIZE]؛
printf ('أدخل السلسلة الأولى:')؛ / * رسالة المستخدم للسلسلة الأولى * /
fgets (سلسلة 1وBUF_SIZEوستدين)؛ / * السلسلة الثانية لإدخال المستخدم ، مخزنة في السلسلة 1 * /
سلسلة 1[ سترلين (سلسلة 1)-1] = ' 0'؛
printf ('أدخل السلسلة الثانية:')؛ / * رسالة المستخدم للسلسلة الثانية * /
fgets (سلسلة 2وBUF_SIZEوستدين)؛ / * السلسلة الثانية لإدخال المستخدم ، مخزنة في السلسلة 2 * /
سلسلة 2[ سترلين (سلسلة 2)-1] = ' 0'؛
ستركونكاتيناتي(سلسلة 1وسلسلة 2)؛ / * استدعاء الدالة باستخدام السلسلة 1 و string2 كوسائط * /
printf ('السلسلة الناتجة =٪ s'ن'وسلسلة 1)؛
إرجاع 0؛
}
لقطات من البرنامج والمخرجات:
تسلسل السلسلة باستخدام memcpy
باستخدام وظيفة memcpy () ، يتم إجراء تسلسل السلسلة عن طريق نسخ كلمة بكلمة من مخزن سلسلة واحد إلى نهاية مخزن سلسلة آخر حيث يكون حجم الكلمة 4 بايت مع الأخذ في الاعتبار أننا نعمل على جهاز 32 بت بينما نقوم بعمل تسلسل سلسلة بواسطة باستخدام تسلسل السلسلة باستخدام دالة strcat () ، يتم إجراء التسلسل عن طريق نسخ بايت بايت من مخزن سلسلة واحد إلى مخزن سلسلة آخر.
هذا النهج هو الأداء الفعال.
الاعتبار الوحيد أثناء استخدام memcpy هو الاهتمام بـ ' 0'.
برنامج C لتحقيق strcat مع memcpy:
#يشمل#يشمل
#define BUF_SIZE 256
strcat_memcpy باطلة(شار *S1و شار *S2)
{
intالطول 1والطول 2؛
الطول 1= سترلين (S1)؛
الطول 2= سترلين (S2)؛
memcpy (S1+الطول 1وS2والطول 2)؛
}
intالأساسية()
{
شارسلسلة 1[BUF_SIZE]وسلسلة 2[BUF_SIZE]؛
printf ('أدخل السلسلة الأولى:')؛ / * رسالة المستخدم للسلسلة الأولى * /
fgets (سلسلة 1وBUF_SIZEوستدين)؛ / * السلسلة الثانية لإدخال المستخدم ، مخزنة في السلسلة 1 * /
سلسلة 1[ سترلين (سلسلة 1)-1] = ' 0'؛
printf ('أدخل السلسلة الثانية:')؛ / * رسالة المستخدم للسلسلة الثانية * /
fgets (سلسلة 2وBUF_SIZEوستدين)؛ / * السلسلة الثانية لإدخال المستخدم ، مخزنة في السلسلة 2 * /
سلسلة 2[ سترلين (سلسلة 2)-1] = ' 0'؛
strcat_memcpy(سلسلة 1وسلسلة 2)؛ / * استدعاء الدالة باستخدام السلسلة 1 و string2 كوسائط * /
printf ('السلسلة الناتجة =٪ s'ن'وسلسلة 1)؛
إرجاع 0؛
}
لقطات من البرنامج والمخرجات:
استنتاج:
مع كل هذه المناقشة ، يمكننا إنهاء تسلسل السلسلة في C. لقد رأينا العديد من الأمثلة وعينات البرامج لسلسلة السلاسل. سوف نتذكر العناصر الرئيسية: هناك طريقتان ، أحدهما بمعيار C والآخر بطريقة يحددها المستخدم. يمكن أن يكون تعريف المستخدم من عدة أنواع ، ويعتمد على كيفية رغبة المستخدم في تنفيذ تسلسل السلسلة.