Frage c ++ - Ganzzahl-> Std :: String-Konvertierung. Einfache Funktion?


Problem: Ich habe eine ganze Zahl; Diese Ganzzahl muss in einen stl :: string-Typ konvertiert werden.

In der Vergangenheit habe ich gebraucht stringstream um eine Umwandlung zu machen, und das ist nur ein bisschen umständlich. Ich weiß, dass der C-Weg ein ist sprintf, aber ich würde lieber eine C ++ - Methode machen, die typsicher ist (er).

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;
}

Natürlich könnte dies wie folgt 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 bin jedoch der Meinung, dass dies eine ziemlich "schwere" Implementierung ist.

Zan bemerkte, dass die Anrufung ziemlich nett ist:

std::string s = t_to_string(my_integer);

Auf jeden Fall wäre ein schöner Weg ... schön.

Verbunden:

Alternative zu itoa () zum Konvertieren von Ganzzahl in String C ++? 


75
2017-11-07 22:52


Ursprung


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


133
2017-12-02 20:12



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 &){
 ...
}

28
2017-11-07 23:14



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 eine Entscheidung zwischen stringstream und sprintf () (snprintf (), wenn Sie es haben).


22
2017-11-07 22:55