C سلسلة تسلسل

C String Concatenation



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

وظيفة مكتبة 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 والآخر بطريقة يحددها المستخدم. يمكن أن يكون تعريف المستخدم من عدة أنواع ، ويعتمد على كيفية رغبة المستخدم في تنفيذ تسلسل السلسلة.