@DWZ

Как проще в VIsual C/C++ заменить «//» на «/» в переданном аргументе командной строки?

Добрый день!

Есть консольная программа Win32, ей в качестве одного из аргументов командной строки передаётся путь к некому каталогу. В имени этого каталога могут двоиться некоторые слеши ("//"). Требуется с минимальными усилиями через библиотечные функции/объекты/ и т.д. заменить два слеша на один (// -> /), чтобы полученный путь можно было легко скормить system() или exec()
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 2
myjcom
@myjcom Куратор тега C++
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;


int main()
{
  string s = "G:/Dev/MinGW/bin/Patch.exe -p0 -i"
             " G:/avidemux_2.7.4/avidemux_core/..//avidemux_core/"
             "ffmpeg_package//patches////////libavcodec_ac3_h.patch ";
      auto end = unique(s.begin(), s.end(), [](unsigned char l, unsigned char r){
          return l == '/' && r == '/';
      });
  s.erase(end, s.end());
  cout << s;
}


https://en.cppreference.com/w/cpp/algorithm/unique
https://en.cppreference.com/w/cpp/algorithm/unique_copy

в зависимости от степени мутабельности.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
На сколько я знаю, в функциях WinAPI, которые работают с путями, допускается указание в путях задвоенных и затроенных (и т.д.) слешей. Причем как прямых так и обратных.
Если у вас не так, стоит привести пример кода, ошибку и путь который передается в программу.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы