Как вставить пробел после каждых двух символов в строке?
Начиная с конца с помощью std::string ?
Ответы (2 шт):
Автор решения: zurn
→ Ссылка
Можно, например, так:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string str = "Hello World!!";
int counter = -1;
std::string str2;
std::for_each(str.rbegin(), str.rend(), [&counter, &str2](char s)
{
counter++;
if(counter == 2)
{
counter = 0;
str2 += " ";
}
str2+= s;});
std::string str3;
std::for_each(str2.rbegin(), str2.rend(), [&str3](char s) {
str3 += s;});
std::cout << str3 << std::endl;
return 0;
}
rbegin() и rend() разворачивают строку.
Автор решения: Harry
→ Ссылка
Ну что-то решение приведено из серии "зачем просто, если можно сложно?"..
Только поэтому дам и свой ответ на уже закрытый вопрос...
string space2(const string& s)
{
if (s.length() <= 2) return s;
int n = 2-s.length()%2;
string r(s,0,n);
for(auto it = s.begin()+n; it != s.end();)
{
r += ' '; r += *it++; r += *it++;
}
return r;
}
Для скорости можно добавить
r.reserve(s.length()*3/2);
Поскольку принятый ответ тоже возвращает другую (отличную от исходной) строку, не стал добавлять решение для требования работать в рамках строго одной строки - но оно в принципе такое же.