تنسيق السلاسل النصية في C++ مثل sprintf: طرق حديثة وآمنة
مرحبًا! أكتب بلغة C++ منذ فترة قصيرة، وواجهت مشكلة في تنسيق السلاسل النصية. سابقًا في لغة C كنت أستخدم sprintf:
char buffer[256];
sprintf(buffer, "مرحبًا، %s! عمرك %d سنة.", name.c_str(), age);
لكن في C++ مع std::string هذا غير مريح: يجب استخدام c_str()، والـ buffer بحجم ثابت، وsprintf غير آمن (يمكن أن يحدث تجاوز للـ buffer). جربت snprintf — أفضل، لكنه لا يزال مرهقًا.
أعرف أن هناك std::stringstream، لكنه كثير الكلام:
std::stringstream ss;
ss << "مرحبًا، " << name << "! عمرك " << age << " سنة.";
std::string result = ss.str();
هذا جيد للحالات البسيطة، لكن عندما تحتاج إلى تنسيق الأرقام (عرض الحقل، الدقة، النظام الست عشري)، يصبح كتابة الكود الزائف مؤلمًا. على سبيل المثال، كيف تظهر double بمنزلتين عشريتين أو int بالنظام الست عشري؟
سمعت عن boost::format، لكنني لا أريد إضافة boost في مشروع صغير. في C++20 يبدو أن std::format ظهر، لكن لدي مترجم