الدرس 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 لا
main.cpp
المخرجاتC++17 · GCC 9 · Judge0

يُترجَم الكود ويعمل على السيرفر…

–/6

يُترجَم الكود ويعمل على السيرفر…

6 معايير في بطاقة «المطلوب».