Экранирование заданного символа в строке

Создайте отдельную строку и пройдите исходную один раз. Перед каждым совпадением добавляйте обратный слеш, затем сам символ. Исходная строка останется неизменной.

Короткий ответ

Что ответить на собеседовании

Создайте отдельную строку и пройдите исходную один раз. Перед каждым совпадением добавляйте обратный слеш, затем сам символ. Исходная строка останется неизменной.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию, которая принимает строку и символ, и возвращает новую строку, в которой каждое вхождение указанного символа предшествует обратный слеш, т.е. символ «экранируется». Функция должна работать без изменения оригинальной строки.

std::string mark_char(const std::string& s, char ch) {
    // реализовать
}

Пример: Вход: "a:b:c", символ ':' → Выход: "a\:b\:c"

Ответ

Создайте отдельную строку и пройдите исходную один раз. Перед каждым совпадением добавляйте обратный слеш, затем сам символ. Исходная строка останется неизменной.

std::string mark_char(const std::string& s, char ch) {
    std::string result;
    result.reserve(s.size());
    for (char current : s) {
        if (current == ch) result.push_back('\\');
        result.push_back(current);
    }
    return result;
}

При ch, равном обратному слешу, каждый такой символ удваивается. Время амортизированно O(n), дополнительная память O(n). Это экранирование одного байта по заданному правилу, а не универсальная защита для SQL, HTML или командной оболочки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее