البرمجة

تشفير النصوص في C++

عندما يتعلق الأمر بتجميع عبارات الشرط في جمل التحقق (if statements) في لغة C++، فإن استخدام المشغلات المنطقية (logical operators) يعد أمراً حيوياً لتحقيق الشروط المطلوبة. وفي هذه الحالة، تحاول تجميع الشرطين باستخدام مشغل الـ”أو” (||) للتحقق من قيمة حرف معين في السلسلة ومن ثم تنفيذ العملية المطلوبة. ومع ذلك، يبدو أنك واجهت بعض الصعوبات في هذه العملية.

عند فحص الشرطين التي حاولت استخدامهما، نجد أن الشرط الأول:

cpp
if (sentence[i] == 'z' || 'Z')

والشرط الثاني:

cpp
if (sentence[i] == 'z' || sentence[i] == 'Z')

الشرط الأول للأسف لا يؤدي الغرض المطلوب، حيث أنه لا يقارن قيمة الحرف ‘Z’ كما هو متوقع. بدلاً من ذلك، يتفقدها على أنها صحيحة دائماً، مما يؤدي إلى تنفيذ الشرط دون التحقق من قيمة sentence[i].

أما الشرط الثاني، فيبدو صحيحاً من الناحية الصوتية، حيث يقارن قيمة sentence[i] بكل من ‘z’ و ‘Z’، ولكنه لا يعمل كما هو متوقع. يجب أن يتم تحديد قيمة sentence[i] مرتين على الأقل، مما يعني أن الشرط يجب أن يكون كما يلي:

cpp
if (sentence[i] == 'z' || sentence[i] == 'Z')

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

لتحقيق ذلك، يمكنك استخدام المشغل الشرطي الثلاثي (ternary conditional operator)، الذي يسمح بكتابة الشروط بشكل مختصر وفعال. يمكن تطبيق هذا المشغل في الحالة الحالية كما يلي:

cpp
if (sentence[i] == 'z' || sentence[i] == 'Z') { sentence[i] -= 26; }

هذا المشغل يعمل على النحو التالي: يقوم بتقييم الشرط المحدد، وإذا كان صحيحاً، يقوم بتنفيذ الجزء الأول من التعبير (في هذه الحالة، تقليص قيمة sentence[i] بـ26). إذا كان الشرط غير صحيح، فإنه يقوم بتنفيذ الجزء الثاني، أي أنه لا يحدث أي تغيير.

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

تأكد من تجربة الشفرة بعد هذا التعديل، ولا تتردد في الرجوع إلينا إذا كنت بحاجة إلى مزيد من المساعدة أو الشرح.

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

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

على سبيل المثال، يمكن دمج جزئي التشغيل في دالة خاصة لتسهيل قراءة الشفرة وزيادة إعادة استخدام الكود. يمكننا إنشاء دالة جديدة تقوم بتحويل الحروف إلى الشكل المشفر المطلوب، وذلك بدلاً من تكرار الكود في داخل دالة encryptString. اليكم الشفرة المحدثة:

cpp
#include #include using namespace std; class EncryptionClass { string sentence; public: //constructors EncryptionClass(string sentence) { setString(sentence); } EncryptionClass() { sentence = ""; } //get and set string getString() { return sentence; } void setString(string sentence) { this->sentence = sentence; } //encrypt void encryptString() { for (int i = 0; i < sentence.length(); i++) { if (isalpha(sentence[i])) { encryptCharacter(sentence[i]); } } } private: // function to encrypt a single character void encryptCharacter(char &c) { if (c == 'z' || c == 'Z') { c -= 26; } c += 1; } }; int main() { string sentence; cout << "Enter a sentence to be encrypted. "; getline(cin, sentence); cout << endl; EncryptionClass sentence1(sentence); cout << "Unencrypted sentence." << endl; cout << sentence1.getString() << endl << endl; sentence1.encryptString(); cout << "Encrypted sentence." << endl; cout << sentence1.getString() << endl; cin.get(); return 0; }

مع إنشاء الدالة encryptCharacter، أصبح بإمكاننا تجميع التشفير في مكان واحد وتسهيل الصيانة في المستقبل. يمكننا أيضًا استخدام هذه الدالة لأي تشفير مشابه في المستقبل، مما يزيد من إعادة استخدام الشفرة ويجعل البرنامج أكثر تنظيمًا وقابلية للتوسيع.

في النهاية، عند تطوير البرمجيات، دائمًا ما يكون من المهم السعي لجعل الشفرة قابلة للفهم والصيانة والتوسيع. من خلال تطبيق مبادئ البرمجة النظيفة واستخدام هياكل البيانات والأدوات المناسبة، يمكننا بناء برامج فعالة وسهلة الاستخدام لتلبية الاحتياجات المختلفة.

مقالات ذات صلة

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر