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);