الدرس 7 من 10

النصوص

هدف الدرس

الدوال find وsubstr وtoupper

01

الشرح

النصّ std::string يعرف طوله، فـ tag.size() عدد أحرفه، وtag[0] أول حرف فيه، ونوعه char. وتجمع + نصّين في نصّ واحد، وتضيف += حرفًا أو نصًّا إلى آخر النصّ. وتقتطع substr(start, count) جزءًا من النصّ، فإذا كان tag هو "lian#1024" فإنّ tag.substr(0, 4) هي "lian". وتُرجع tag.find('#') موضع أول ظهور للحرف، فإذا لم تجده أرجعت قيمة خاصّة اسمها std::string::npos، وليست -1 ولا صفرًا، فقارن بها صراحةً.

وانتبه إلى أنّ + تحتاج أن يكون أحد طرفيها std::string، فـ "HP: " + 2 يقبلها المترجم لكنها لا تجمع شيئًا، بل تتخطّى أول حرفين من النصّ فتطبع ": "، لذلك حوّل الرقم إلى نصّ أوّلًا: "HP: " + std::to_string(hp).

أما std::toupper(c) وstd::tolower(c) من <cctype> فتحوّلان حرفًا لاتينيًّا واحدًا إلى كبير أو صغير، وتُرجعان int، فأعد النتيجة حرفًا بـ static_cast<char>. وانتبه إلى أنّ std::string يخزّن بايتات وليس حروفًا، والحرف العربي بايتان في UTF-8، فـ std::string("ليان").size() تساوي 8، و[0] نصف حرف. لذلك جاءت أمثلة هذا الدرس بأسماء لاعبين بالحروف اللاتينية، لأنّ معالجة النصّ العربي حرفًا حرفًا تحتاج إلى أدوات أخرى.

02

المطلوب

أكمل std::string initials(const std::string& full) لتُرجع الحرف الأول من كل كلمة بحرف كبير، فـ initials("lian saad") هي "LS"، والمسافات الزائدة لا تُحسب كلمات. وأكمل std::string username(const std::string& tag) لتُرجع ما قبل # في معرّف مثل "lian#1024"، والنصّ كلّه إذا لم يكن فيه #. ثم أكمل bool isPalindrome(const std::string& s) لتُبيّن هل يُقرأ النصّ من أوّله ومن آخره بالشكل نفسه، دون تفريق بين الحرف الكبير والصغير، فـ "Racecar" نعم و"hello" لا.

الفحوص

6 فحوص
  1. الدالة initials تُرجع الحرف الأول من كل كلمة بحرف كبير
  2. الدالة initials تعمل مع الكلمة الواحدة والمسافات الزائدة والنصّ الفارغ
  3. الدالة username تُرجع ما قبل #
  4. الدالة username تُرجع النصّ كلّه إذا لم يكن فيه #
  5. الدالة isPalindrome تقبل level وRacecar وترفض hello
  6. الدالة isPalindrome تقبل النصّ الفارغ والحرف الواحد وترفض ab
03

تلميحات

0/3
دروس المسارأتممت 0 من 10

تُكتب بلغة C++ محرّكات الألعاب والمتصفحات وأنظمة التشغيل، لأنها سريعة وتمنحك تحكّمًا كاملًا.

مستواه مبتدئ، وفيه 10 دروس مجموع مدّتها ساعتان.

main.cpp
المخرجاتC++17 (GCC 9, Judge0)

يُترجَم كودك الآن ويُشغَّل على الخادم.

–/6

يُترجَم كودك الآن ويُشغَّل على الخادم.

تجد 6 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 10

تُكتب بلغة C++ محرّكات الألعاب والمتصفحات وأنظمة التشغيل، لأنها سريعة وتمنحك تحكّمًا كاملًا.

مستواه مبتدئ، وفيه 10 دروس مجموع مدّتها ساعتان.