البرمجة

تحويل دالة مقارنة من C++ إلى C

لنقم بتحويل الكود من C++ إلى لغة البرمجة C. في الواقع، الفكرة العامة للكود هي مقارنة بين سلاسل النصوص (strings) a و b بحيث نقوم بدمجهما معًا بشكل مختلف ثم نقارن النتائج.

في البداية، يجب أن نعلم أن لغة البرمجة C لا تقدم نفس مستوى الدعم الجاهز للنصوص كما هو الحال في C++، لذا سنحتاج إلى استخدام مكتبة مخصصة لمعالجة النصوص، مثل مكتبة string.h، ونستخدم نوع البيانات char* لتمثيل النصوص.

نظرًا لأن لغة C لا تدعم مباشرة استخدام bool كنوع بيانات، سنستخدم int بدلاً من ذلك، حيث يكون قيمة الصحيحة 1 للـ true و0 للـ false.

الآن، لنقم بتحويل الدالة compare:

c
#include int compare(const char* a, const char* b) { char concat1[strlen(a) + strlen(b) + 1]; // +1 لتخزين الحرف النهائي الخاص بنهاية النص char concat2[strlen(b) + strlen(a) + 1]; // يجب أن تكون النهاية معرفة بوجود النص في C strcpy(concat1, a); strcat(concat1, b); strcpy(concat2, b); strcat(concat2, a); return strcmp(concat1, concat2) > 0; // يعود 1 إذا كان concat1 أكبر، و 0 إذا كانت متساوية، و -1 إذا كانت concat2 أكبر }

تم استبدال النوع string بنوع البيانات const char* الذي يُستخدم لتمثيل النصوص في لغة C. ثم تم استخدام دوال مكتبة string.h مثل strlen لحساب طول النصوص و strcpy و strcat لنسخ ودمج النصوص على التوالي. وأخيرًا، تم استخدام strcmp لمقارنة النصوص المدموجة وإرجاع قيمة صحيحة تشير إلى نتيجة المقارنة.

بهذا، قمنا بتحويل الكود بنجاح من C++ إلى C مع الحفاظ على نفس المنطق.

المزيد من المعلومات

بالطبع، سأزيد من التفاصيل حول الكود والتغييرات التي تم إجراؤها لتحويله من C++ إلى C.

في الدالة الأصلية في C++:

cpp
bool compare(string a, string b) { return a + b > b + a; }
  • يستخدم نوع البيانات string المدمج في C++ لتمثيل النصوص.
  • يتم استخدام عامل الجمع + لدمج النصوص.
  • يتم استخدام نوع البيانات bool لإرجاع قيمة منطقية true أو false.

أما في النسخة المحولة للغة C:

c
#include int compare(const char* a, const char* b) { char concat1[strlen(a) + strlen(b) + 1]; char concat2[strlen(b) + strlen(a) + 1]; strcpy(concat1, a); strcat(concat1, b); strcpy(concat2, b); strcat(concat2, a); return strcmp(concat1, concat2) > 0; }
  • تم استبدال نوع البيانات string بـ const char* في C، والذي يُعرف على أنه مؤشر إلى تسلسل من الأحرف (نص).
  • تم استخدام دوال مكتبة string.h مثل strlen لحساب طول النصوص و strcpy و strcat للتعامل مع النصوص.
  • تم استخدام strcmp لمقارنة النصوص، حيث تعود الدالة بقيمة أكبر من صفر إذا كان النص الأول أكبر من النص الثاني، وتعود قيمة أقل من صفر إذا كان النص الثاني أكبر، وتعود صفر إذا كانت النصوص متساوية.

هذه التغييرات تعكس الفروق الرئيسية بين لغتي البرمجة C++ و C، حيث تحتاج C إلى معالجة يدوية أكثر للنصوص ولا تقدم نفس مستوى الدعم المدمج لها كما في C++.

زر الذهاب إلى الأعلى