Чтобы использовать этот метод, необходимо включить следующее: #include <string> #include <stdlib.h>

самый короткий способ, предпочтительно встроенный, конвертировать int в строку? Ответы с использованием stl и boost будут приветствоваться.

 UmNyobe17 дек. 2015 г., 16:21
 user28314524 апр. 2013 г., 12:02
В C ++ 11 вы можете использоватьto_string любитьstd::string s = std::to_string(42)
 augustin19 февр. 2015 г., 16:54
Да здравствует C ++ 11 и to_string! :)

Ответы на вопрос(10)

#include <string>
#include <stdlib.h>

Вот еще один простой способ конвертировать int в строку

int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());

Вы можете посетить эту ссылку для более подробной информации.https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/

 Vipul Dungranee05 янв. 2019 г., 12:09
Чтобы использовать этот метод, необходимо включить следующее: #include <string> #include <stdlib.h>

#include <sstream>

std::ostringstream s;
int i;

s << i;

std::string converted(s.str());

Конечно, вы можете обобщить его для любого типа, используя функцию шаблона ^^

#include <sstream>

template<typename T>
std::string toString(const T& value)
{
    std::ostringstream oss;
    oss << value;
    return oss.str();
}
 neuro20 июл. 2016 г., 11:34
@TechNyquist: Да, с некоторымиstd:: ;)
 TechNyquist19 июл. 2016 г., 18:54
Таким образом, вы не имели в виду, что это должно быть компилируемо, но на самом деле с включением это :)
 neuro19 июл. 2016 г., 14:46
@TechNyquist: Ты прав. Не предназначено для компиляции, но изменилось!
 TechNyquist18 июл. 2016 г., 09:27
Примечание: это требует#include <sstream>.

integer = 0123456789101112, Теперь это целое число может быть преобразовано в строкуstringstream класс.

Вот код на C ++:

   #include <bits/stdc++.h>
   using namespace std;
   int main()
   {
      int n,i;
      string s;
      stringstream st;
      for(i=0;i<=12;i++)
      {
        st<<i;
      }
      s=st.str();
      cout<<s<<endl;
      return 0;

    }
 Shawon14 мая 2016 г., 08:33
Да, но я думаю, что этот ответ идеален, так как я не получил никакого эффективного ответа от предыдущего.
 Walter13 мая 2016 г., 23:41
не были похожи, но более полные ответы уже давались много лет назад?

ostringstream или жеboost::lexical_cast.

Но если вам нужно многократно преобразовывать строку в ваш код, этот макрос более элегантен в использовании, чем прямая обработка строковых потоков или явное приведение каждый раз.

Это такжеочень универсален, так как преобразуетвсе поддерживаетсяoperator<<()даже в комбинации.

Определение:

#include <sstream>

#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
            ( std::ostringstream() << std::dec << x ) ).str()

Объяснение:

std::dec это побочный эффект без анонимностиostringstream в общийostream такoperator<<() Функция lookup работает cor, прямо для всех типов. (В противном случае вы попадете в беду, если первый аргумент имеет тип указателя.)

dynamic_cast возвращает тип обратноostringstream так что вы можете позвонитьstr() в теме.

Использование:

#include <string>

int main()
{
    int i = 42;
    std::string s1 = SSTR( i );

    int x = 23;
    std::string s2 = SSTR( "i: " << i << ", x: " << x );
    return 0;
}
 rubenvb12 янв. 2011 г., 15:20
@DevSolar: не будетinline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() } делать? (Не проверял, но мне интересно, что пошло бы не так и почему?
 DevSolar12 янв. 2011 г., 14:48
@rubenvb: Извините, это было не так ясно, как следовало бы. Я не вижу способа, как я мог бы превратить это в шаблон (используя C ++ 98), не потеряв ни способности к последовательному выводу (как в моем втором примере), ни придумав запутанный беспорядок для обработки любое количество параметров и типов параметров.
 rubenvb12 янв. 2011 г., 14:05
Если вы сделаете этоinline шаблон и я проголосую.
 DevSolar12 янв. 2011 г., 14:25
@rubenvb: Вы скажете мне, как превратить это в шаблон, и я обновлю все проекты C ++, в которых я использовал эту конструкцию.
 DevSolar12 янв. 2011 г., 16:59
@rubenvb: Это подойдет для человекаint (мой первый пример). Но безostream видимый для компилятора вmain (поскольку он скрыт внутри функции шаблона), он попытается найтиoperator<<() заconst char [] в моем втором примере - который будет каркать. Я знаю, что ОП попросил толькоint, но этот более общий макрос настолько полезен (и на самом деле довольно широко распространен), что я решил включить его сюда.

std::to_string из C ++ 11 вы можете написать это так, как это определено на cppreference.com:

std::string to_string( int value ) Преобразует десятичное целое со знаком в строку с тем же содержимым, что иstd::sprintf(buf, "%d", value) будет производить для достаточно большого buf.

Реализация

#include <cstdio>
#include <string>
#include <cassert>

std::string to_string( int x ) {
  int length = snprintf( NULL, 0, "%d", x );
  assert( length >= 0 );
  char* buf = new char[length + 1];
  snprintf( buf, length + 1, "%d", x );
  std::string str( buf );
  delete[] buf;
  return str;
}

Вы можете сделать больше с этим. Просто используйте"%g" для преобразования числа с плавающей запятой или двойного в строку используйте"%x" преобразовать int в шестнадцатеричное представление и так далее.

Решение Вопроса

Вы можете использоватьстанд :: to_string в C ++ 11

int i = 3;
std::string str = std::to_string(i);
 Archie09 нояб. 2015 г., 09:55
std :: to_string () не работает в MinGW, если кому-то все равно.
 bparker02 дек. 2015 г., 17:16
@ Archie у меня работает на mingw gcc 4.9.2
 Archie02 дек. 2015 г., 17:24
@bparker Правильно, это исправлено в gcc 4.8.0. MinGW идет с последней версией Code :: Blocks (13.12), все еще имеет gcc 4.7.1.
#include <sstream>
#include <string>
const int i = 3;
std::ostringstream s;
s << i;
const std::string i_as_string(s.str());


Вот что модифицировано для работы с std :: string:http://www.strudel.org.uk/itoa/

boost::lexical_cast<std::string>(yourint) изboost/lexical_cast.hpp

Работайте для всего с поддержкой std :: ostream, но не так быстро, как, например,itoa

Это даже кажется быстрее, чем stringstream или scanf:

http://www.boost.org/doc/libs/1_53_0/doc/html/boost_lexical_cast/performance.html
 Conrad Jones08 окт. 2017 г., 19:45
«Ответы с использованием stl и boost будут приветствоваться». - Аудитория считается
 rubenvb12 янв. 2011 г., 14:06
Boost - твой друг, если в Standard C ++ не было простого способа сделать это ...lexical_cast приносит, но чувствую, Boost в значительной степени излишним для такого рода задач ...
 Damian27 февр. 2016 г., 00:49
Следует учитывать вашу аудиторию, если они не могут использовать Boost
 Catskul04 июн. 2013 г., 00:34
Overkill? На основании чего?boost.org/doc/libs/1_53_0/doc/html/boost_lexical_cast/...

но она реализована на большинстве распространенных компиляторов:

int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);

Обновить

C ++ 11 представил несколькоstd::to_string перегрузки (обратите внимание, что по умолчанию используется base-10).

 Zac Howland12 янв. 2011 г., 14:08
@DevSolar: Вы должны уточнить. Пример буста уже был приведен. Это решение доступно на большинстве компиляторов, если не установлен boost (или ваши требования не позволяют использовать его по какой-либо причине).ostream работает также, пока вам не нужно сохранить числовую строку как что-то кроме двоичного, восьмеричного или шестнадцатеричного формата (например, base-32).
 DevSolar12 янв. 2011 г., 13:53
Пожалуйста, не ...
 Zac Howland12 янв. 2011 г., 15:14
Извините, что оскорбляю ваши чувства, но я утверждал, что в первом предложении это была нестандартная функция. Я не упоминал об этом, ноsprintf может также достичь цели OP (хотя все еще страдает от недостатка гибкости, если требуется что-либо кроме общих базовых чисел).
 DevSolar12 янв. 2011 г., 14:23
Мне не нравится, когда нестандартные функции, такие какitoa() или жеstricmp() даны как ответ начто-нибудь.
 DevSolar12 янв. 2011 г., 17:00
Да, вы это заявили, и я не понизил ваш ответ, даже когда мне очень хотелось это сделать. Так что я думаю, что мы даже. ;-)

Ваш ответ на вопрос