مقارنة السلاسل: برمجة سي

String Comparison C Programming



السلسلة في لغة C هي مصفوفة من الأحرف تنتهي بحرف فارغ ( 0). تتم مقارنة سلاسل باستخدام هذه الخاصية.







يمكن مقارنة سلسلتين بطرق مختلفة. في هذا البرنامج التعليمي ، أولاً ، سنرى وظيفة يحددها المستخدم لمقارنة سلسلتين ، ثم سنرى بعض وظائف المكتبة المضمنة التي يمكن استخدامها لمقارنة سلسلتين بسهولة بالغة. لذلك دعونا نبدأ.



مقارنة السلاسل باستخدام وظيفة محددة من قبل المستخدم:

سنكتب وظيفة stringCompare () لمقارنة السلاسل. نجتاز السلاسل ونقارن كل حرف في السلسلة حتى نصل إلى نهاية أي واحد أو كلاهما أو يتم العثور على واحد غير متطابق. إذا تم الوصول إلى الاجتياز إلى نهاية كلتا السلسلتين ، فستتم مطابقة السلاسل ؛ خلاف ذلك ، السلاسل غير متطابقة.



01./*userDefinedFunction.c*/
02.
03.#يشمل
04.
05.intسلسلة( شارشارع 1[ ]و شارstr2[ ] )
06.{
07.intأنا=0؛
08.
09. في حين(شارع 1[أنا] ==str2[أنا] )
10.
خمسة عشر.
16.لو(شارع 1[أنا] == ' 0' &&str2[أنا] == ' 0' )
17.إرجاع 0؛
18.آخر
19.إرجاع -1؛
عشرين.
واحد وعشرين.}
22.
2. 3.
24.intالأساسية()
25.{
26.شارشارع 1[30]وstr2[30]؛
27.
28. printf ('أدخل السلسلة الأولى:')؛
29. مسح ('٪ [^ن]٪ * c 'وشارع 1)؛
30. printf ('أدخل السلسلة الثانية:')؛
31. مسح ('٪ [^ن]٪ * c 'وstr2)؛
32.
33.لو(سلسلة(شارع 1وstr2) == 0)
3. 4. printf ('الأوتار متساويةن')؛
35.آخر
36. printf ('الأوتار ليست متساويةن')؛
37.
38.إرجاع 0؛ 39.}





هنا نجتاز السلاسل باستخدام حلقة while ومتغير أنا . عندما تكون الأحرف متساوية في نفس الموضع لكلا السلسلتين ، فإن قيمة أنا يزداد بمقدار 1 (السطر 13). إذا كانت الأحرف غير متساوية (السطر 09) أو وصلنا إلى نهاية السلسلة (السطر 11) ، فإن حلقة while هي فاصل. بعد حلقة while ، نتحقق من وصول كل من اجتياز السلسلة إلى النهاية أم لا (السطر 16). إذا تم الوصول إلى الاجتياز إلى نهاية كلتا السلسلتين ، فإن السلاسل تكون متساوية بخلاف ذلك.

مقارنة السلاسل باستخدام وظائف المكتبة المضمنة:

يمكن استخدام وظائف المكتبة التالية لمقارنة السلاسل. يتم الإعلان عن جميع الوظائف في ملف سلسلة. h الملف الاساسي.



وظيفة strcmp ():

تقارن هذه الوظيفة بين سلسلتين تم تمريرهما إلى الوظيفة.

بناء الجملة :

int ستركمب (مقدار ثابت شار *شارع 1و مقدار ثابت شار *str2)

قيمة الإرجاع: قم بإرجاع 0 إذا كانت السلاسل متساوية. قم بإرجاع عدد صحيح سالب إذا كانت قيمة ASCII للحرف الأول غير المتطابق للسلسلة الأولى أقل من السلسلة الثانية. قم بإرجاع عدد صحيح موجب إذا كانت قيمة ASCII للحرف الأول غير المتطابق للسلسلة الأولى أكبر من السلسلة الثانية. ترجع بعض الأنظمة اختلاف قيمة ASCII للحرف الأول غير المتطابق وتعود بعض الأنظمة -1 إذا كانت قيمة ASCII للحرف الأول غير المتطابق للسلسلة الأولى أقل من السلسلة الثانية وتعيد 1 إذا كانت قيمة ASCII للحرف الأول غير المتطابق من السلسلة الأولى أكبر من السلسلة الثانية.

مثال قيمة الإرجاع تفسير
strcmp ( مرحبا العالم ، مرحبا العالم ) 0 سلسلان متماثلان.
strcmp ( مرحبًا ، مرحبًا 0 العالم ) 0 تتم مقارنة السلاسل حتى الحرف ' 0'. تنتهي السلسلة الأولى افتراضيًا بـ ' 0' ، وتحتوي السلسلة الثانية على الحرف ' 0' بعد 'مرحبًا'.
strcmp ( مرحبًا 0 0 0 ″ ، مرحبًا 0 عالم ) 0 تتم مقارنة السلاسل حتى الحرف ' 0'.
strcmp ( مرحبا العالم ، مرحبا العالم ) عدد صحيح سالب قيمة ASCII للحرف الأول غير المتطابق للسلسلة الأولى ('H') أقل من السلسلة الثانية ('h')
strcmp ( مرحبا العالم ، مرحبا العالم ) عدد صحيح موجب قيمة ASCII للحرف الأول غير المتطابق للسلسلة الأولى ('h') أكبر من السلسلة الثانية ('H')

دالة strncmp ():

هذه الوظيفة تشبه الوظيفة strcmp () ، ولكن علينا هنا تحديد عدد البايتات التي تتم مقارنتها بتمرير وسيطة إضافية للدالة.

بناء الجملة:

int strncmp (مقدار ثابت شار *شارع 1و مقدار ثابت شار *str2و size_tن)

قيمة الإرجاع: ترجع الدالة 0 إذا كان الأول ن أحرف السلسلتين متساوية ؛ وإلا ، فإنه يُرجع عددًا صحيحًا سالبًا أو موجبًا اعتمادًا على علامة الاختلافات بين قيمة ASCII للحرف الأول غير المتطابق.

مثال قيمة الإرجاع تفسير
strncmp ( مرحبًا بالعالم ، مرحبًا بالعالم 5 ) 0 أول 5 أحرف هي نفسها.
strncmp ( مرحبًا ، مرحبًا 0 العالم ، 5 ) 0 أول 5 أحرف هي نفسها.
strncmp ( مرحبًا 0 0 0 ″ ، مرحبًا 0 العالم ، 8 ) 0 ' 0' بعد الأحرف الخمسة الأولى في كلا السلسلتين. لذلك ، تتوقف المقارنة بعد 5 وليس 8.
strncmp ( مرحبًا بالعالم ، مرحبًا بالعالم ، 5 ) عدد صحيح سالب قيمة ASCII للحرف الأول غير المتطابق للسلسلة الأولى ('H') أقل من السلسلة الثانية ('h')

دالة strcasecmp ():

هذه الوظيفة تشبه الوظيفة strcmp () ، ولكن هنا السلاسل ليست حساسة لحالة الأحرف.

بناء الجملة:

intstrcasecmp(مقدار ثابت شار *شارع 1و مقدار ثابت شار *str2)

قيمة الإرجاع: مثل strcmp () ، ولكن يتم التعامل مع السلاسل على أنها حالة الأحرف .

مثال قيمة الإرجاع تفسير
strcasecmp ( مرحبا العالم ، مرحبا العالم ) 0 سلسلان متماثلان.
strcasecmp ( مرحبًا ، مرحبًا 0 العالم ) 0 تتم مقارنة السلاسل حتى الحرف ' 0'. تنتهي السلسلة الأولى افتراضيًا بـ ' 0' ، وتحتوي السلسلة الثانية على الحرف ' 0' بعد 'مرحبًا'.
strcasecmp ( مرحبا العالم ، مرحبا العالم ) 0 السلاسل حالة الأحرف. لذا ، Hello World و hello World متماثلان.

دالة strncasecmp ():

هذه الوظيفة تشبه الوظيفة strncmp () ، ولكن هنا السلاسل ليست حساسة لحالة الأحرف.

بناء الجملة:

intstrncasecmp(مقدار ثابت شار *شارع 1و مقدار ثابت شار *str2)

قيمة الإرجاع: مثل strncmp () ، عندما يتم التعامل مع السلاسل باعتبارها حساسة لحالة الأحرف.

مثال قيمة الإرجاع تفسير
strncasecmp ( مرحبًا بالعالم ، مرحبًا بالعالم 5 ) 0 أول 5 أحرف هي نفسها.
strncasecmp ( مرحبًا ، مرحبًا 0 العالم ، 5 ) 0 أول 5 أحرف هي نفسها.
strncasecmp ( مرحبًا 0 0 0 ″ ، مرحبًا 0 العالم ، 8 ) 0 ' 0' بعد الأحرف الخمسة الأولى في كلا السلسلتين. لذلك ، تتوقف المقارنة بعد 5 وليس 8.
strncasecmp ( مرحبًا بالعالم ، مرحبًا بالعالم ، 5 ) 0 السلاسل حالة الأحرف. لذا ، مرحبًا ومرحبًا هما نفس الشيء.

وظيفة memcmp ():

تقارن هذه الوظيفة بين كتلتين من وحدات الذاكرة بايت بايت. علينا تمرير مؤشرين من كتل الذاكرة وعدد البايتات للمقارنة.

بناء الجملة:

int memcmp (مقدار ثابت فارغ *شارع 1و مقدار ثابت فارغ *str2و size_tن)

قيمة الإرجاع: ترجع الدالة 0 إذا كانت كتلتي الذاكرة ( ن بايت) متساوية ؛ وبخلاف ذلك ، تقوم بإرجاع الاختلافات بين أول زوج من البايت غير متطابق (يتم تفسير البايت على أنها كائنات char غير موقعة ، ثم يتم ترقيتها إلى int).

مثال قيمة الإرجاع تفسير
memcmp ( مرحبًا بالعالم ، مرحبًا بالعالم 5 ) 0 أول 5 أحرف هي نفسها.
memcmp ( مرحبًا 0 0 0 ″ ، مرحبًا 0 العالم ، 8 ) عدد صحيح سالب الأحرف الستة الأولى هي نفسها ، لكن الحرف السابع مختلف. هنا المقارنة لم تتوقف مثل strncmp () عند الحصول على الحرف ' 0'.
memcmp ( مرحبًا بالعالم ، مرحبًا بالعالم ، 11 ) عدد صحيح سالب قيمة ASCII للحرف الأول غير المتطابق للسلسلة الأولى ('H') أقل من السلسلة الثانية ('h')

مثال:

فيما يلي مثال على رمز C لجميع الوظائف التي تمت مناقشتها.

01./*stringCompare.c*/
02.
03.#يشمل
04.#يشمل
05.
06.intالأساسية()
07.{
08. printf ('strcmp ('مرحبا بالعالم'،'مرحبا بالعالم') =>٪ dن'و ستركمب ( 'مرحبا بالعالم'و'مرحبا بالعالم' ))؛
09. printf ('strcmp ('أهلا'،'أهلا\0العالمية') =>٪ dن'و ستركمب ( 'أهلا'و'أهلا 0العالمية' ))؛
10. printf ('strcmp ('مرحبا بالعالم'،'مرحبا بالعالم') =>٪ dن'و ستركمب ( 'مرحبا بالعالم'و'مرحبا بالعالم' ) )؛
أحد عشر. printf ('strcmp ('أهلا\0\0\0'،'أهلا\0العالمية') =>٪ dن'و ستركمب ( 'أهلا 0 0 0'و'أهلا 0العالمية' ))؛
12.
13. printf ('ن---------------ن')؛
14.
خمسة عشر. printf ('strncmp ('مرحبا بالعالم'،'مرحبا بالعالم'، 5) =>٪ dن'و strncmp ( 'مرحبا بالعالم'و'مرحبا بالعالم'و5 ))؛
16. printf ('strncmp ('أهلا'،'أهلا\0العالمية'، 5) =>٪ dن'و strncmp ( 'أهلا'و'أهلا 0العالمية'و5 ))؛
17. printf ('strncmp ('أهلا\0\0\0'،'أهلا\0العالمية'، 8) =>٪ dن'و strncmp ( 'أهلا 0 0 0'و'أهلا 0العالمية'و8 ))؛
18. printf ('strncmp ('مرحبا بالعالم'،'مرحبا بالعالم'، 5) =>٪ dن'و strncmp ( 'مرحبا بالعالم'و'مرحبا بالعالم'و5 ))؛
19.
عشرين. printf ('ن---------------ن')؛
واحد وعشرين.
22. printf ('strcasecmp ('مرحبا بالعالم'،'مرحبا بالعالم') =>٪ dن'وstrcasecmp( 'مرحبا بالعالم'و'مرحبا بالعالم' ))؛
2. 3. printf ('strcasecmp ('أهلا'،'أهلا\0العالمية') =>٪ dن'وstrcasecmp( 'أهلا'و'أهلا 0العالمية' ))؛
24. printf ('strcasecmp ('مرحبا بالعالم'،'مرحبا بالعالم') =>٪ dن'وstrcasecmp( 'مرحبا بالعالم'و'مرحبا بالعالم' ))؛
25.
26. printf ('ن---------------ن')؛
27.
28. printf ('strncasecmp ('مرحبا بالعالم'،'مرحبا بالعالم'، 5) =>٪ dن'وstrncasecmp( 'مرحبا بالعالم'و'مرحبا بالعالم'و5 ) )؛
29. printf ('strncasecmp ('أهلا'،'أهلا\0العالمية'، 5) =>٪ dن'وstrncasecmp( 'أهلا'و'أهلا 0العالمية'و5 ))؛
30. printf ('strncasecmp ('أهلا\0\0\0'،'أهلا\0العالمية'، 8) =>٪ dن'وstrncasecmp( 'أهلا 0 0 0'و'أهلا 0العالمية'و8 ))؛
31. printf ('strncasecmp ('مرحبا بالعالم'،'مرحبا بالعالم'، 5) =>٪ dن'وstrncasecmp( 'مرحبا بالعالم'و'مرحبا بالعالم'و5 ))؛
32.
33. printf ('ن---------------ن')؛
3. 4.
35. printf ('memcmp ('مرحبا بالعالم'،'مرحبا بالعالم'، 5) =>٪ dن'و memcmp ( 'مرحبا بالعالم'و'مرحبا بالعالم'و5 ) )؛
36. printf ('memcmp ('أهلا\0\0\0'،'أهلا\0العالمية'، 8) =>٪ dن'و memcmp ( 'أهلا 0 0 0'و'أهلا 0العالمية'و8 ))؛
37. printf ('memcmp ('مرحبا بالعالم'،'مرحبا بالعالم'، 11) =>٪ dن'و memcmp ( 'مرحبا بالعالم'و'مرحبا بالعالم'وأحد عشر ))؛
38.
39.إرجاع 0؛ 40.}

استنتاج:

لذلك ، في هذا البرنامج التعليمي ، رأينا كيف يمكن مقارنة السلاسل بطرق مختلفة. كما رأينا ، ترجع الدالة stringCompare () -1 للسلاسل غير المتكافئة ، ولكن يمكن تعديل ذلك بحيث يُرجع قيمة ASCII للحرف غير المتطابق. يمكنك استخدامه في الكود الخاص بك ، وهو الأنسب لك.