Как объединить std :: string и int? - PullRequest
611 голосов
/ 10 октября 2008

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

std::string name = "John";
int age = 21;

Как мне объединить их, чтобы получить одну строку "John21"?

Ответы [ 22 ]

2 голосов
/ 25 ноября 2013

Вот реализация того, как добавить int к строке, используя фасеты синтаксического анализа и форматирования из библиотеки IOStreams.

#include <iostream>
#include <locale>
#include <string>

template <class Facet>
struct erasable_facet : Facet
{
    erasable_facet() : Facet(1) { }
    ~erasable_facet() { }
};

void append_int(std::string& s, int n)
{
    erasable_facet<std::num_put<char,
                                std::back_insert_iterator<std::string>>> facet;
    std::ios str(nullptr);

    facet.put(std::back_inserter(s), str,
                                     str.fill(), static_cast<unsigned long>(n));
}

int main()
{
    std::string str = "ID: ";
    int id = 123;

    append_int(str, id);

    std::cout << str; // ID: 123
}
1 голос
/ 29 апреля 2018

С библиотекой {fmt} :

auto result = fmt::format("{}{}", name, age);

Подмножество библиотеки предлагается для стандартизации как P0645 Форматирование текста , и, если оно будет принято, приведенное выше станет:

auto result = std::format("{}{}", name, age);

Отказ от ответственности : я являюсь автором библиотеки {fmt}.

...