Problem: Ich habe eine ganze Zahl; Diese Ganzzahl muss in einen stl :: string-Typ konvertiert werden.
In der Vergangenheit habe stringstream
ich eine Konvertierung durchgeführt, und das ist nur ein bisschen umständlich. Ich weiß, dass der C-Weg darin besteht, a zu machen sprintf
, aber ich würde viel lieber eine typsichere C ++ - Methode machen.
Gibt es einen besseren Weg, dies zu tun?
Hier ist der Stringstream-Ansatz, den ich in der Vergangenheit verwendet habe:
std::string intToString(int i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Dies könnte natürlich folgendermaßen umgeschrieben werden:
template<class T>
std::string t_to_string(T i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Ich habe jedoch die Vorstellung, dass dies eine ziemlich "schwere" Implementierung ist.
Zan bemerkte jedoch, dass der Aufruf ziemlich nett ist:
std::string s = t_to_string(my_integer);
Ein schöner Weg wäre jedenfalls ... schön.
Verbunden:
Alternative zu itoa () zum Konvertieren von Integer in String C ++?
Antworten:
Jetzt in c ++ 11 haben wir
#include <string> string s = std::to_string(123);
Link zur Referenz: http://en.cppreference.com/w/cpp/string/basic_string/to_string
quelle
Wie bereits erwähnt, würde ich Boost lexical_cast empfehlen. Es hat nicht nur eine ziemlich schöne Syntax:
#include <boost/lexical_cast.hpp> std::string s = boost::lexical_cast<std::string>(i);
es bietet auch einige Sicherheit:
try{ std::string s = boost::lexical_cast<std::string>(i); }catch(boost::bad_lexical_cast &){ ... }
quelle
Nicht wirklich im Standard. Einige Implementierungen haben eine nicht standardmäßige itoa () -Funktion, und Sie könnten Boosts lexical_cast nachschlagen, aber wenn Sie sich an den Standard halten, ist es so ziemlich eine Wahl zwischen stringstream und sprintf () (snprintf (), wenn Sie ihn haben).
quelle