عند مقارنة السلاسل النصية في لغة C، ماذا تستخدم؟ الدالة strcmp
هي دالة للتحقق مما إذا كان سلسلتان نصيتان متطابقتين، وكأنك تسأل البرنامج: “هل هذان الاثنان متماثلان؟”. بالطبع، لا يمكن للبرنامج الحكم على ما إذا كان القط أو الكلب أجمل، لكنه على الأقل يمكنه التمييز بين “HELLO” و “hello”. في هذه المقالة، سنشرح آلية عمل الدالة strcmp
، وكيفية استخدامها، والنقاط التي يسهل ارتكاب الأخطاء فيها.
1. ما هي الدالة strcmp؟
الدالة strcmp
هي دالة تقارن سلسلتين نصيتين حرفًا بحرف، وتعيد النتيجة كقيمة عددية صحيحة. تعمل هذه الدالة كما يلي:
- 0: إذا كانت السلسلتان النصيتان متطابقتين
- قيمة موجبة: إذا كانت السلسلة النصية الأولى تأتي أبجديًا بعد الثانية
- قيمة سالبة: إذا كانت السلسلة النصية الأولى تأتي أبجديًا قبل الثانية
هذه الدالة لا تتحقق فقط مما إذا كانت السلاسل النصية متطابقة بالكامل، بل يمكنها أيضًا تحديد أيهما يأتي أولاً. في البرنامج، يمكن استخدامها ببساطة كما يلي:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
printf("strcmpの結果: %dn", result);
return 0;
}
الكود أعلاه يقارن “Hello” و “World” ويعرض النتيجة. النقطة المهمة هي أن الدالة strcmp
تميّز بين الأحرف الكبيرة والصغيرة، لذا فإن “HELLO” و “hello” تعتبران سلسلتين نصيتين مختلفتين.
2. مبدأ عمل الدالة strcmp
عمل الدالة strcmp
بسيط ولكنه قوي. تقارن السلسلتين النصيتين حرفًا بحرف بدءًا من الحرف الأول، وعند ظهور أول حرف مختلف، تعيد الفرق بين قيمتي ASCII للحرفين. يمكن تطبيق هذه الآلية أيضًا على المقارنة الأبجدية. على سبيل المثال، عند مقارنة “apple” و “banana”، ستقارن الدالة strcmp
أولاً “a” و “b” وتعيد قيمة سالبة.
فيما يلي مثال لبرنامج لفهم آلية عمل الدالة strcmp
بشكل أكبر:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
if (result == 0) {
printf("文字列は一致しています。n");
} else if (result < 0) {
printf("str1はstr2より前にあります。n");
} else {
printf("str1はstr2より後にあります。n");
}
return 0;
}
في هذا الكود، نقارن “apple” و “banana”. نتيجة لذلك، تخبرنا الدالة strcmp
أن “apple” يأتي أبجديًا قبل “banana”. هذا يجعلها مفيدة أيضًا عند ترتيب السلاسل النصية أبجديًا.

3. أمثلة على استخدام الدالة strcmp
1. التحقق من إدخال المستخدم
الدالة strcmp
مفيدة عند مقارنة البيانات التي أدخلها المستخدم بالبيانات الموجودة. على سبيل المثال، يمكن استخدامها للتحقق من تطابق كلمات المرور.
#include <stdio.h>
#include <string.h>
int main() {
char password[] = "secret";
char input[256];
printf("パスワードを入力してください: ");
scanf("%s", input);
if (strcmp(password, input) == 0) {
printf("パスワードが一致しました。n");
} else {
printf("パスワードが間違っています。n");
}
return 0;
}
يقارن هذا البرنامج كلمة المرور المدخلة بكلمة المرور الصحيحة باستخدام الدالة strcmp
.
2. الترتيب الأبجدي (المعجمي)
الدالة strcmp
مفيدة أيضًا عند فرز السلاسل النصية أبجديًا. عند فرز عدة كلمات، يمكن استخدام الدالة strcmp
لتحديد الكلمة التي يجب أن تأتي أولاً.
4. بدائل للدالة strcmp
الدالة strcmp
مريحة للغاية، ولكن قد يكون من المفيد النظر في دوال أخرى اعتمادًا على الغرض.
strncmp: مقارنة جزء من السلسلة النصية
تُستخدم الدالة strncmp
عندما تريد مقارنة جزء فقط من السلسلة النصية. على سبيل المثال، تُستخدم لمقارنة أول 3 أحرف من السلسلة النصية.
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "apricot";
if (strncmp(str1, str2, 3) == 0) {
printf("最初の3文字は一致しています。n");
} else {
printf("最初の3文字は一致していません。n");
}
return 0;
}
memcmp: مقارنة الذاكرة
الدالة memcmp
هي دالة لمقارنة مناطق الذاكرة بأكملها بدلاً من السلاسل النصية. تكون مفيدة عندما تكون هناك حاجة لمقارنة البيانات الثنائية.
5. الأخطاء الشائعة
1. عدم مراعاة الفرق بين الأحرف الكبيرة والصغيرة
الدالة strcmp
تميّز بين الأحرف الكبيرة والصغيرة. على سبيل المثال، يتم التعامل مع “HELLO” و “hello” على أنهما مختلفتين. إذا كنت بحاجة إلى مقارنة لا تعتمد على حالة الأحرف، ففكر في استخدام الدالة strcasecmp
.
2. مقارنة مؤشر NULL
مقارنة مؤشر NULL باستخدام الدالة strcmp
يمكن أن يسبب عطلاً. من المهم التأكد من تهيئة السلاسل النصية المراد مقارنتها بشكل صحيح.
الخلاصة
الدالة strcmp
هي دالة مهمة جدًا في لغة C وتجعل مقارنة السلاسل النصية سهلة. شرحنا استخداماتها في البرامج الفعلية مثل التحقق من كلمات المرور وترتيب السلاسل النصية مع أمثلة. نرجو أن تجرب سهولة هذه الدالة في عمليات معالجة السلاسل النصية في برامجك.