Каков самый короткий путь, желательно встроенный, чтобы преобразовать int в строку? Ответы с использованием stl и boost будут приветствоваться.
Преобразование int в std::string
Ответ 1
Вы можете использовать std:: to_string в С++ 11
int i = 3;
std::string str = std::to_string(i);
Ответ 2
#include <sstream>
#include <string>
const int i = 3;
std::ostringstream s;
s << i;
const std::string i_as_string(s.str());
Ответ 3
boost::lexical_cast<std::string>(yourint)
от boost/lexical_cast.hpp
Работайте со всем с поддержкой std:: ostream, но не так быстро, как, например, itoa
Он даже кажется более быстрым, чем stringstream или scanf:
Ответ 4
Хорошо известный способ сделать это - использовать оператор потока:
#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();
}
Ответ 5
Если вы не можете использовать std::to_string
из С++ 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"
для преобразования float или double в строку, используйте "%x"
для преобразования int в шестнадцатеричное представление и т.д.
Ответ 6
Нестандартная функция, но ее реализовано в большинстве распространенных компиляторов:
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
Обновление
С++ 11 ввел несколько std::to_string
перегрузок (обратите внимание, что по умолчанию он равен base-10).
Ответ 7
Следующий макрос не такой компактный, как одноразовый 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<<()
корректно работает для всех типов. (Вы попадаете в проблему иначе, если первый аргумент является типом указателя.)
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;
}
Ответ 8
Вы можете включить реализацию itoa в свой проект.
Здесь itoa изменен для работы с std::string: http://www.strudel.org.uk/itoa/
Ответ 9
Вы можете использовать эту функцию для преобразования int
в std::string
после включения <sstream>
:
#include <sstream>
string IntToString (int a)
{
stringstream temp;
temp<<a;
return temp.str();
}
Ответ 10
Предположим, что у меня есть integer = 0123456789101112
. Теперь это целое число можно преобразовать в строку классом stringstream
.
Вот код в С++:
#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;
}
Ответ 11
#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/