Каков самый короткий способ, желательно встроенный, преобразовать int в строку? Будут приветствоваться ответы с использованием stl и boost.
Преобразование int в std :: string
Ответы (10)
Вы можете использовать std :: to_string в C ++ 11
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
из boost/lexical_cast.hpp
Работает для всего с поддержкой std :: ostream, но не так быстро, как, например, itoa
Он даже кажется быстрее, чем stringstream или scanf:
lexical_cast
, но чувствую, что Boost в значительной степени избыточен для такого рода задач ...
- person rubenvb; 12.01.2011
Хорошо известный способ (до C ++ 11) сделать это - использовать оператор потока:
#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();
}
#include <sstream>
.
- person TechNyquist; 18.07.2016
std::
;)
- person neuro; 20.07.2016
Если вы не можете использовать 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"
для преобразования float или double в строку, используйте "%x"
для преобразования int в шестнадцатеричное представление и так далее.
Нестандартная функция, но реализована на самых распространенных компиляторах:
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) .
ostream
также работает, пока вам не понадобится сохранить числовую строку как нечто иное, чем двоичный, восьмеричный или шестнадцатеричный формат (например, base-32).
- person Zac Howland; 12.01.2011
itoa()
или stricmp()
даются в качестве ответа на что угодно.
- person DevSolar; 12.01.2011
sprintf
также может достичь цели OP (хотя все еще страдает отсутствием гибкости, если требуется что-то, кроме общих базовых чисел).
- person Zac Howland; 12.01.2011
Следующий макрос не такой компактный, как одноразовый 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;
}
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() }
не подойдет? (Не тестировал, но мне интересно, что пойдет не так и почему?
- person rubenvb; 12.01.2011
int
(мой первый пример). Но без ostream
, видимого компилятору в main
(так как он скрыт внутри функции шаблона), он попытается найти operator<<()
для const char []
в моем втором примере - который будет квакать. Я знаю, что OP запрашивал только int
, но этот более общий макрос настолько полезен (и на самом деле довольно широко распространен), что я подумал, что включу его здесь.
- person DevSolar; 12.01.2011
std::string s2( "i: " + SSTR(i) + ", x: " + SSTR(x) );
, что, на мой взгляд, быстрее (меньше потоковых операторов) и более выразительно (вы не передаете все, включая const char*
, в рассматриваемую функцию. Что Я люблю C ++ за эти педантичные дискуссии ;)
- person rubenvb; 12.01.2011
ostringstream
объекта, дополнительного str()
вызова и трех operator+()
вызовов, и чем длиннее становится шлейфовое соединение, тем хуже становится. ;-) Кроме того, я не понимаю, о чем вы говорите, передавая все в рассматриваемую функцию. Я не понимаю, где вы что-то экономите на этом ориентировочном уровне.
- person DevSolar; 12.01.2011
const char*
также передаются в функцию / макрос, о котором идет речь). Что ж, я вполне могу ошибаться здесь, но все же я предоставил альтернативу встроенному шаблону функции ИМХО.
- person rubenvb; 12.01.2011
Вы можете использовать эту функцию для преобразования int
в std::string
после включения <sstream>
:
#include <sstream>
string IntToString (int a)
{
stringstream temp;
temp<<a;
return temp.str();
}
Вы можете включить реализацию itoa в свой проект.
Вот itoa, измененный для работы с std :: string: http://www.strudel.org.uk/itoa/
#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/
Предположим, у меня есть 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;
}
to_string
какstd::string s = std::to_string(42)
- person   schedule 24.04.2013