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

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

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

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

Вот подход, который я использовал в прошлом:

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

В любом случае, способ получше был бы ... приятным.

Related:

Alternative to itoa() for converting integer to string C++?

В вашем примере t_to_string я не понимаю, почему требуется спецификация шаблона. Шаблонная функция может определять свой тип шаблона по типам аргументов.

Zan Lynx 29.07.2010 02:06

@Zan: Дурп. Это то, что я получаю за публикацию кода, который не компилировал.

Paul Nathan 29.07.2010 02:13

Как насчет некоторых примеров из следующего: codeproject.com/KB/recipes/Tokenizer.aspx Они очень эффективны и несколько элегантны.

Matthieu N. 02.11.2010 08:01

@Beh: Эта библиотека значительно тяжелее, чем простая t_to_string (). На самом деле это выглядит очень хорошей библиотекой, но я бы не хотел импортировать все это просто для выполнения t_to_string ().

Paul Nathan 08.11.2010 20:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
76
4
110 133
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Не совсем, в стандарте. В некоторых реализациях есть нестандартная функция itoa (), и вы можете найти lexical_cast Boost, но если вы придерживаетесь стандарта, это в значительной степени выбор между stringstream и sprintf () (snprintf (), если он у вас есть).

Хорошо, что это было исправлено, см. Ответ Шауба

sehe 16.05.2012 12:00

Как упоминалось ранее, я бы рекомендовал увеличить 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 &){
 ...
}
Ответ принят как подходящий

Теперь в С ++ 11 у нас есть

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

Ссылка для справки: http://en.cppreference.com/w/cpp/string/basic_string/to_string

Очень стильно. Есть ссылка на страницу стандарта с описанием функции?

Paul Nathan 03.12.2011 03:53

ошибки компилятора для меня - "std :: to_string: неоднозначный вызов перегруженной функции"

JMarsch 13.10.2012 00:06

Я бы перефразировал это на «Ну наконец то, у нас есть ...».

Sam Goldberg 02.08.2013 19:08

Другие вопросы по теме