c++: поставить пробелы между буквами в строке

подскажите, есть ли в STL (пусть даже в C++20) функции аналогичные питоновскому join()

необходимо добавить после каждого символа за исключением последнего пробел

например

"test" -> "t e s t"

конечно можно решить в лоб собрав побуквенно:

std::string dst = "";
for (int i = 0; i < src.length(); i++)
{
    dst += std::string(1, src[i]) + ((i == src.length() - 1) ? "" : " ");
}

или даже так, чтобы покороче (при условии, что строка не пустая)

std::string dst = std::string(1, src[i]);
for (int i = 1; i < src.length(); i++)
{
    dst += std::string(" ") + std::string(1, src[i]);
}

но можно ли это сделать красиво встроенные средствами "в одну строчку"


Ответы (1 шт):

Автор решения: KoVadim

Не знаю, насколько "в одну строку", но можно - std::accumulate

#include <iostream>
#include <numeric>
#include <string>
#include <functional>
#include <cassert> 
int main()
{
    std::string test = "test";
    assert(test.size() > 1);
    std::string s1 = std::accumulate(std::next(test.begin()), test.end(), std::string(1,test[0]), [](std::string a, char b) -> std::string {return a+ " " + b;});
    std::cout << s1;
}

В Boost есть готовое boost::algorithm::join(..):

#include <boost/algorithm/string/join.hpp>
//...
std::string joinedString = boost::algorithm::join(elems, delim);
→ Ссылка