«Int to string» في C++: لماذا يعاني حتى الخبراء من هذه المشكلة؟
\nتخيل موقفًا: تكتب برنامجًا بلغة C++ يجب أن يعرض رقمًا على الشاشة، ثم يضيف إليه نصًا — على سبيل المثال، «النتيجة: 42». أو تحتاج إلى حفظ معرف المستخدم (int) في ملف JSON كسلسلة نصية. قد يبدو الأمر بسيطًا، لكن المشكلة أنك في C++ لا يمكنك ببساطة كتابة string s = 42;. سيعطي المترجم خطأ.
سؤال «How can I convert int to string in C++?» هو أحد أكثر الأسئلة شيوعًا على Stack Overflow (مئات الآلاف من المشاهدات). وهذا ليس من قبيل الصدفة. على عكس Python أو JavaScript، حيث يتم التحويل «بسحر تلقائي»، تتطلب C++ تحويلًا صريحًا للأنواع. لكن لا تقلق! في هذه المقالة، سنستعرض 5 طرق مجربة، من الطرق التقليدية إلى C++20 الحديثة. ستتعرف على أي طريقة أسرع، وأيها أكثر ملاءمة، ومتى تستخدم كلًا منها.
\nهيا بنا!
\n\nالطريقة رقم 1: std::to_string — حديثة وبسيطة (C++11 وما بعده)
\nبدءًا من C++11، ظهرت في المكتبة القياسية الدالة std::to_string. هذه هي أبسط وأسهل طريقة لتحويل int إلى string في C++.
#include <iostream>\n#include <string>\n\nint main() {\n int number = 2024;\n std::string str = std::to_string(number);\n std::cout << "السلسلة: " << str << std::endl; // الإخراج: السلسلة: 2024\n return 0;\n}\nالمزايا:
\n- \n
- قصيرة وواضحة — سطر واحد من الكود \n
- تدعم int، long، float، double وأنواع رقمية أخرى \n
- لا حاجة لتضمين مكتبات إضافية (باستثناء <string>) \n
العيوب:
\n- \n
- لا يوجد تحكم في التنسيق (عدد الأرقام، الأصفار البادئة) \n
- أبطأ من الطرق منخفضة المستوى إذا تم استدعاؤها ملايين المرات \n
متى تستخدم: في 90% من الحالات. للمهام العادية التي لا تتطلب تنسيقًا محددًا للإخراج، std::to_string هو الخيار المثالي.
الطريقة رقم 2: std::stringstream — مرنة مثل سكين سويسري
\nإذا كنت لا تحتاج فقط إلى تحويل رقم، بل أيضًا إلى تنسيقه (إضافة مسافات، تغيير أساس نظام العد)، فإن std::stringstream يأتي للإنقاذ. هذه فئة من مكتبة <sstream> تعمل كـ «سلسلة نصية ذكية».
#include <iostream>\n#include <sstream>\n#include <string>\n\nint main() {\n int number = 255;\n std::stringstream ss;\n ss << "القيمة: " << number << " (سداسي عشري: " << std::hex << number << ")";\n std::string result = ss.str();\n std::cout << result << std::endl;\n // الإخراج: القيمة: 255 (سداسي عشري: ff)\n return 0;\n}\nالمزايا:
\n- \n
- تحكم كامل في التنسيق (std::hex، std::oct، std::setw، std::setprecision)
- يمكن دمج السلاسل النصية والأرقام «أثناء التنفيذ»
العيوب:
- أبطأ من
std::to_stringبسبب إنشاء كائن stringstream - يتطلب كودًا أكثر للتحويل البسيط
متى تستخدم: عندما تحتاج إلى تنسيق معقد أو تحويل إلى أنظمة عد مختلفة.
الطريقة رقم 3: sprintf و snprintf — الطريقة القديمة من لغة C
طريقة قديمة لكنها موثوقة، جاءت من لغة C. الدالة sprintf تكتب سلسلة نصية منسقة في مصفوفة char. يمكن استخدامها في C++ أيضًا، لكن يجب الحذر من تجاوز سعة المخزن المؤقت.
#include <iostream>\n#include <cstdio> // لـ sprintf\n#include <cstring> // لـ strlen\n\nint main() {\n int number = 42;\n char buffer[50];\n sprintf(buffer, "%d", number);\n std::string str(buffer);\n std::cout << "النتيجة: " << str << std::endl;\n return 0;\n}
هام:
المدونات
توصيات الكتب
اقرأ أيضًا