Как добавить обратную косую черту после каждого символа в строке?

Мне нужно преобразовать буквальный путь к файлу (C: /example.txt) в файл, совместимый с различными функциями реестра WinAPI (C: //example.txt), и я понятия не имею, как это сделать.

Я разбил его на необходимость добавить обратную косую черту после определенного символа (/ в данном случае), но я полностью застрял после этого.

Руководство и примеры кода будут с благодарностью.

Я использую C ++ и VS2012.

-2

Решение

При замене каждого вхождения прямой косой черты на два обратная косая черта действительно то, что вы хотите, то это должно сделать работу:

size_t i = str.find('/');
while (i != string::npos)
{
string part1 = str.substr(0, i);
string part2 = str.substr(i + 1);
str = part1 + R"(\\)" + part2; // Use "\\\\" instead of R"(\\)" if your compiler doesn't support C++11's raw string literals
i = str.find('/', i + 1);
}

РЕДАКТИРОВАТЬ:

Постскриптум Если я неправильно понял вопрос, и вы намерены заменить каждое появление прямой косой черты просто один обратная косая черта, то есть более простое и эффективное решение (как указывает @RemyLebeau в комментарии):

size_t i = str.find('/');
while (i != string::npos)
{
str[i] = '\\';
i = str.find('/', i + 1);
}

Или даже лучше:

std::replace_if(str.begin(), str.end(), [] (char c) { return (c == '/'); }, '\\');
0

Другие решения

В C ++ строки состоят из отдельных символов, таких как "foo", Строки могут состоять из печатных символов, таких как буквы алфавита, или непечатаемых символов, таких как клавиша ввода или другие управляющие символы.

Вы не можете печатать один из этих непечатаемых символов обычным способом при заполнении строки. Например, если вам нужна строка, содержащая «foo», затем вкладку, а затем «bar», вы не можете создать ее, набрав:

fooTABbar

потому что это просто вставит столько пробелов — это на самом деле не вставит TAB персонаж.

Вы можете указать эти непечатаемые символы, «убрав» их. Это делается путем вставки символа обратной косой черты (\) с последующим кодом персонажа. В случае строки выше TAB представлен escape-последовательностью \tтак что вы бы написали: "foo\tbar",

Характер \ сам по себе не является непечатаемым символом, но C ++ (и C) распознают его как особый — он всегда обозначает начало escape-последовательности. Чтобы включить символ «\» в строку, он должен быть экранирован с помощью \\,

Так что в C ++, если вы хотите строку, которая содержит:

C: \ Windows \ Foo \ бар

Вы кодируете это, используя escape-последовательности:

string s = "c:\\windows\\foo\\bar"
1

\\ это не два символа, это один символ:

for(size_t i = 0, sz = sPath.size() ; i < sz ; i++)
if(sPath[i]=='/')  sPath[i] = '\\';

Но имейте в виду, что некоторые API работают с \, а некоторые с /, поэтому вам нужно проверить, в каких случаях использовать эту замену.

1
По вопросам рекламы [email protected]