Преобразование int в std :: string - PullRequest
118 голосов
/ 12 января 2011

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

Ответы [ 11 ]

316 голосов
/ 10 ноября 2014

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

int i = 3;
std::string str = std::to_string(i);
46 голосов
/ 12 января 2011
#include <sstream>
#include <string>
const int i = 3;
std::ostringstream s;
s << i;
const std::string i_as_string(s.str());
36 голосов
/ 12 января 2011

boost::lexical_cast<std::string>(yourint) от boost/lexical_cast.hpp

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

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

30 голосов
/ 12 января 2011

Хорошо известный способ сделать это - использовать оператор потока:

#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();
}
14 голосов
/ 28 сентября 2015

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

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

Реализация

#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 в шестнадцатеричное представление и т. Д.

13 голосов
/ 12 января 2011

Нестандартная функция, но она реализована на большинстве распространенных компиляторов:

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

8 голосов
/ 12 января 2011

Следующий макрос не так компактен, как одноразовый ostringstream или boost::lexical_cast.

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

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

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

#include <sstream>

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

Объяснение:

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

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;
}
0 голосов
/ 01 апреля 2019

Вы можете использовать эту функцию для преобразования int в std::string после включения <sstream>:

#include <sstream>

string IntToString (int a)
{
    stringstream temp;
    temp<<a;
    return temp.str();
}
0 голосов
/ 05 января 2019
#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/

0 голосов
/ 13 мая 2016

Предположим, у меня есть 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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...