Я думал, что это будет действительно просто, но это представляет некоторые трудности. Если у меня есть
std::string name = "John";
int age = 21;
Как мне объединить их, чтобы получить одну строку "John21"
?
c++
int
concatenation
stdstring
Обедия Стейн
источник
источник
Boost::lexical_cast
,std::stringstream
,std::strstream
(который не рекомендуется), иsprintf
противsnprintf
.Ответы:
В алфавитном порядке:
#include <string>
)#include <sstream>
(от стандарта C ++)источник
String(number)
.В C ++ 11 вы можете использовать
std::to_string
, например:источник
Если у вас есть Boost, вы можете преобразовать целое число в строку, используя
boost::lexical_cast<std::string>(age)
.Другой способ - использовать строковые потоки:
Третий подход будет использовать
sprintf
илиsnprintf
из библиотеки C.Другие постеры предложили использовать
itoa
. Это НЕ стандартная функция, поэтому ваш код не будет переносимым, если вы его используете. Есть компиляторы, которые не поддерживают это.источник
sprintf
в ответе только случаяsnprintf
.источник
Бесстыдно похищен с http://www.research.att.com/~bs/bs_faq2.html .
источник
s
это переменная стека, памятьs
будет свободна после вызоваitos
.s
надо выделять из кучи, аfree
после использования, верно?Это самый простой способ:
источник
Если у вас есть C ++ 11, вы можете использовать
std::to_string
.Пример:
Вывод:
источник
name += std::to_string(static_cast<long long>(age));
в VC ++ 2010, как вы можете видеть здесьname += std::to_string(age + 0LL);
этого?Мне кажется, что самый простой ответ - использовать
sprintf
функцию:источник
источник
Тогда ваше использование будет выглядеть примерно так
Погуглил [и проверил: p]
источник
Эта проблема может быть решена разными способами. Я покажу это двумя способами:
Преобразуйте число в строку, используя
to_string(i)
.Использование строковых потоков.
Код:
источник
Если вы хотите использовать
+
для объединения всего, что имеет оператор вывода, вы можете предоставить шаблонную версиюoperator+
:Тогда вы можете написать свои объединения простым способом:
Вывод:
Это не самый эффективный способ, но вам не нужен самый эффективный способ, если вы не делаете много конкатенации внутри цикла.
источник
std::string
, поэтому не будет кандидатом в выражения, где строка не может быть преобразована в нужный тип. Например, этоoperator+
не может быть использовано для+
вint x = 5 + 7;
. Учитывая все обстоятельства, я бы не определить оператор , как это без очень веских причин, но моя цель состояла в том, чтобы предложить другой ответ от других.Если вы используете MFC, вы можете использовать CString
Управляемый C ++ также имеет форматировщик строки .
источник
Std :: ostringstream - хороший метод, но иногда этот дополнительный трюк может пригодиться для преобразования форматирования в однострочный:
Теперь вы можете отформатировать строки следующим образом:
источник
Поскольку вопрос, связанный с Qt, был закрыт в пользу этого, вот как это сделать, используя Qt:
Строковая переменная теперь имеет значение someIntVariable вместо% 1 и значение someOtherIntVariable в конце.
источник
Есть больше возможностей, которые можно использовать для объединения целого числа (или другого числового объекта) со строкой. Это Boost.Format
и карма от Boost.Spirit (v2)
Boost.Spirit Karma претендует на звание одного из самых быстрых вариантов преобразования целых чисел в строки .
источник
Общий ответ: itoa ()
Это плохо.
itoa
является нестандартным, как указано здесь .источник
Вы можете объединить int в строку, используя приведенный ниже простой прием, но учтите, что это работает только тогда, когда целое число состоит из одной цифры. В противном случае добавьте целое число за цифрой к этой строке.
источник
Вот реализация того, как добавить int к строке, используя аспекты синтаксического анализа и форматирования из библиотеки IOStreams.
источник
источник
Я написал функцию, которая принимает число int в качестве параметра и преобразует его в строковый литерал. Эта функция зависит от другой функции, которая преобразует одну цифру в ее символьный эквивалент:
источник
С библиотекой {fmt} :
Подмножество библиотеки предлагается для стандартизации как форматирование текста P0645, и, если оно будет принято, приведенное выше станет:
Отказ от ответственности : я являюсь автором библиотеки {fmt}.
источник
Как один лайнер:
name += std::to_string(age);
источник