ج ++ integer-> الأمراض المنقولة جنسيا :: سلسلة التحويل. وظيفة بسيطة؟

StackOverflow https://stackoverflow.com/questions/273908

  •  07-07-2019
  •  | 
  •  

سؤال

المشكلة: لدي عدد صحيح. يحتاج هذا صحيحا لتحويلها إلى نوع المحكمة الخاصة بلبنان :: سلسلة.

في الماضي، لقد استعملت stringstream للقيام التحويل، وهذا مجرد نوع من مرهقة. وأنا أعلم أن الطريق C هي القيام sprintf، ولكن يهمني كثيرا بدلا من القيام C ++ طريقة التي هي typesafe (إيه).

هل هناك طريقة أفضل للقيام بذلك؟

وهنا هو النهج stringstream ولقد استخدمت في الماضي:

std::string intToString(int i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

وبطبيعة الحال، هذا يمكن إعادة كتابة بحيث:

template<class T>
std::string t_to_string(T i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

ولكن، لدي فكرة أن هذا هو إلى حد ما "الوزن الثقيل" التنفيذ.

وأشار زان أن الاحتجاج هو لطيف جدا، ولكن:

std::string s = t_to_string(my_integer);

وعلى أية حال، فإن الطريقة أجمل أن يكون ... لطيفة.

<اقتباس فقرة>   

ذات صلة:

     

البديل لitoa () لتحويل عدد صحيح إلى سلسلة C ++ ؟

هل كانت مفيدة؟

المحلول

والآن في c ++ 11 لدينا

#include <string>
string s = std::to_string(123);

وصلة إلى مرجعية: http://en.cppreference.com/w/cpp/string/basic_string / to_string

نصائح أخرى

ومثل المذكورة سابقا، أود أن أوصى دفعة lexical_cast. ليس فقط أنها لا يكون لها جملة لطيفة إلى حد ما:

#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);

وكما يوفر بعض سلامة:

try{
  std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
 ...
}

وليس حقا، في المعيار. بعض التطبيقات لديها itoa غير قياسي () وظيفة، وكنت قد بحث عن lexical_cast دفعة، ولكن إذا كنت عصا لمعيار انها الى حد كبير الاختيار بين stringstream وsprintf () (snprintf () إذا كنت قد حصلت عليه).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top