Использование std::transform
.
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string s("hello");
std::transform(s.begin(), s.end(), s.begin(),
[](unsigned char c) -> unsigned char { return c + 2; });
// if you don't want to flush stdout, you may use "\n" instead of "\n"
std::cout << s << std::endl;
}
Как это работает, работает с помощью обратного вызова для каждого символа и преобразует строку на месте.
Обратный вызов просто добавляет 2 ксимвол без знака:
[](unsigned char c) -> unsigned char { return c + 2; }
Остальное просто:
std::transform(s.begin(), s.end(), s.begin(), callback);
Простой, расширяемый и легко читаемый.