Pertanyaan c ++ integer-> std :: konversi string. Fungsi sederhana?


Masalah: Saya memiliki integer; integer ini perlu dikonversi ke stl :: string type.

Di masa lalu, saya telah menggunakan stringstream untuk melakukan konversi, dan itu agak tidak praktis. Saya tahu cara C adalah melakukan sprintf, tapi saya lebih suka melakukan metode C ++ yang bersifat typesafe (er).

Apakah ada cara yang lebih baik untuk melakukan ini?

Berikut adalah pendekatan stringstream yang telah saya gunakan di masa lalu:

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

    return s;
}

Tentu saja, ini bisa ditulis ulang seperti:

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

    return s;
}

Namun, saya berpendapat bahwa ini adalah implementasi yang cukup 'berat'.

Zan mencatat bahwa doa itu cukup bagus, namun:

std::string s = t_to_string(my_integer);

Bagaimanapun, cara yang lebih baik akan ... bagus.

Terkait:

Alternatif untuk itoa () untuk mengkonversi integer ke string C ++? 


75
2017-11-07 22:52


asal


Jawaban:


Sekarang di c ++ 11 yang kita miliki

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

Tautan ke referensi: http://en.cppreference.com/w/cpp/string/basic_string/to_string


133
2017-12-02 20:12



Seperti yang disebutkan sebelumnya, saya sarankan untuk meningkatkan lexical_cast. Tidak hanya memiliki sintaks yang cukup bagus:

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

itu juga menyediakan beberapa keamanan:

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

28
2017-11-07 23:14



Tidak juga, dalam standar. Beberapa implementasi memiliki fungsi itoa () yang tidak standar, dan Anda dapat mencari lexical_cast Boost, tetapi jika Anda tetap pada standar, itu cukup banyak pilihan antara stringstream dan sprintf () (snprintf () jika Anda mendapatkannya).


22
2017-11-07 22:55