Frage

Problem: Ich habe eine ganze Zahl ist; diese ganze Zahl muss eine stl :: string-Typ umgewandelt werden.

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

Gibt es einen besseren Weg, dies zu tun?

Hier ist der Ansatz, den ich in string der Vergangenheit verwendet habe:

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

    return s;
}

Natürlich ist dies, wie so neu geschrieben werden:

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

    return s;
}

Allerdings habe ich die Vorstellung, dass dies eine ziemlich ist ‚schwergewichtige‘ Umsetzung.

Zan stellte fest, dass der Aufruf ziemlich nett ist, aber:

std::string s = t_to_string(my_integer);

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

  

Verwandte:

     

Alternative zu itoa () für die Ganzzahl-String C ++ Umwandeln ?

War es hilfreich?

Lösung

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

Andere Tipps

Wie bereits erwähnt, würde ich boost lexical_cast empfehlen. Nicht nur, dass es eine ziemlich nette Syntax:

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

es bietet auch eine gewisse Sicherheit:

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

Nicht wirklich, in der Norm. Einige Implementierungen haben eine Nicht-Standard-itoa () Funktion, und man konnte Boost-des lexical_cast aussehen, aber wenn Sie den Standard halten, es ist so ziemlich eine Wahl zwischen string und sprintf () (snprintf (), wenn Sie es haben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top