كيفية تحويل int إلى string في C++: دليل كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

«Int to string» في C++: لماذا يعاني حتى الخبراء من هذه المشكلة؟

\n

تخيل موقفًا: تكتب برنامجًا بلغة C++ يجب أن يعرض رقمًا على الشاشة، ثم يضيف إليه نصًا — على سبيل المثال، «النتيجة: 42». أو تحتاج إلى حفظ معرف المستخدم (int) في ملف JSON كسلسلة نصية. قد يبدو الأمر بسيطًا، لكن المشكلة أنك في C++ لا يمكنك ببساطة كتابة string s = 42;. سيعطي المترجم خطأ.

\n

سؤال «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++.

\n
#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
  • أبطأ من الطرق منخفضة المستوى إذا تم استدعاؤها ملايين المرات
  • \n
\n

متى تستخدم: في 90% من الحالات. للمهام العادية التي لا تتطلب تنسيقًا محددًا للإخراج، std::to_string هو الخيار المثالي.

\n\n

الطريقة رقم 2: std::stringstream — مرنة مثل سكين سويسري

\n

إذا كنت لا تحتاج فقط إلى تحويل رقم، بل أيضًا إلى تنسيقه (إضافة مسافات، تغيير أساس نظام العد)، فإن std::stringstream يأتي للإنقاذ. هذه فئة من مكتبة <sstream> تعمل كـ «سلسلة نصية ذكية».

\n
#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}

هام:

المدونات

توصيات الكتب