c++ integer - > std:: преобразование строк. Простая функция?


проблема: у меня есть целое число; это целое число должно быть преобразовано в тип STL:: string.

в прошлом, я использовал stringstream чтобы сделать преобразование,и это просто громоздко. Я знаю, что путь C-это сделать a sprintf, но я бы предпочел сделать метод C++, который является типобезопасным(er).

есть ли лучший способ сделать это?

вот подход 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++?

3 75

3 ответа:

теперь в 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 Boost, но если вы придерживаетесь стандарта, это в значительной степени выбор между stringstream и sprintf () (snprintf () если у вас есть).