- Переберите строку за один проход (
for
цикл) и switch
для каждого символа.
- При обнаружении символа, который необходимо экранировать, вставьте обратную косую черту в выходной буфер
- Вставить текущий символ в выходной буфер.
Используйте std::ostringstream
для выходного буфера.
Это очень эффективно (однопроходный, буферизованный вывод) и просто в реализации. Чтобы сделать его еще более эффективным, непосредственно используйте std::string
в качестве буфера вывода, добавьте символы, используя push_back
и reserve
достаточно большую емкость (например, 1.5 * input.length()
) перед циклом.