Заменить символ '/' на “\\”

269
20 декабря 2016, 22:32

Нужно в строке заменить все символы / на \\. Делал следующим образом:

string s;
cin >> s;
for(int i = 0; i < s.size(); i++)
{
    if(s[i] == '/')
    {
        s.replace(i, 1, "\\");
    }
}

Но почему-то получается так, что символ / заменяется только на \, а не на \\.

Answer 1

Дело в том, что "\\" и есть одиночный бекслеш. Попробуйте "\\\\".

В C++ в строковых литералах \ является специальным экранирующим символом: он означает не себя, а просто модифицирует значение следующего за ним символа. Например, \n означает не бекслеш и символ n, а перевод строки, символ с кодом 0x10.

Поэтому сам по себе бекслеш не означает бекслеш. Для ввода бекслеша нужно использовать \\.

Вы можете проверить длину строки "\\\\", она равна 2. (Проверка: http://ideone.com/DhxHe8)

Это, кстати, возможно, и есть причина странного поведения редактора по отношению к двойному бекслешу.

Answer 2

Напишите так:

s.replace(i, 1, "\\\\");
Answer 3

Или так:

s.replace(i, 1, R"(\)");
READ ALSO
Вопрос по шаблонным методам C++ [требует правки]

Вопрос по шаблонным методам C++ [требует правки]

Не получается пройти тестовый вопросПодскажите пожалуйста:

317
Подключение .lib/.dll в Qt проект

Подключение .lib/.dll в Qt проект

Пытаюсь подключить в Qt проект на С++ (никакие собственные библиотеки Qt не используются) библиотеки ole32 и oleaut32 из набора windows SDK

767
Рамка вокруг изображения в QLabel

Рамка вокруг изображения в QLabel

Есть QLabel, в который нужно запихнуть изображениеНужно сделать так, чтобы это изображение отображалось с рамкой различной толщины

425
Перевод с C++ на русский или C#

Перевод с C++ на русский или C#

ДВС! Помогите расшифровать фрагмент кода:

530