Как изменить вхожение символов в строку c++?

Получаю путь к файлу через *argv, получается вот такая строка (к примеру) C:\User\Desktop\file.exe
И как мне в этой строке изменить одинарный слеш на двойной, то есть чтобы получилась строка C:\\User\\Desktop\\file.exe
Всю голову уже поломал... Помогите пожалуйста
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
ВНИМАНИЕ! Двойные слэши — это метод экранирования слэша в Си-подобных языках. Экранирование — это механизм, применяемый в компьютерных языках и протоколах, основанных на текстовых файлах. Один из символов объявлен специальным, как ввести этот самый символ, лишённый спец. статуса? То есть, когда мы пишем "C:\\file.ext", компилятор уберёт двойной слэш, и в машинном коде будет одинарный.

Другими словами: если вы думаете открыть файл с этим именем — НИЧЕГО ДЕЛАТЬ НЕ НАДО.
А надо В ОДНОМ СЛУЧАЕ: вставить это имя в исходник на Си-подобном языке (JS/SQL/…). Но: на SQL у каждой СУБД есть свои функции по экранированию, надо пользоваться именно ими.

Всё ещё хотите?
std::string escapeSlashes(const std::string& s)
{
  // Подсчитать слэши
  size_t nSlashes = 0;
  for (char c : s)
    if (c == '\\')      // это один слэш
      ++nSlashes;
  // Ни одного?
  if (nSlashes == 0)
    return s;
  // Есль хоть один — заэкранируем
  // Но прежде выделим сколько надо памяти.
  std::string r;
  r.reserve(s.length() + nSlashes);
  for (char c : s)
    if (c == '\\')      // это один слэш
      r += "\\\\";      // это два слэша
      else r += c;
  return r;
}

Код писался из головы и возможны ошибки, но вот так выглядит мало-мальски оптимизированная функция по обработке строк. Для простоты использован оператор «for по контейнеру» Си++11.

UPD. Видите строчку, в которой четыре слэша? Это заэкранированные ДВА слэша.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы