Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

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

#cpp


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

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


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


Ответы

Ответ 1



Дело в том, что "\\" и есть одиночный бекслеш. Попробуйте "\\\\". В C++ в строковых литералах \ является специальным экранирующим символом: он означает не себя, а просто модифицирует значение следующего за ним символа. Например, \n означает не бекслеш и символ n, а перевод строки, символ с кодом 0x10. Поэтому сам по себе бекслеш не означает бекслеш. Для ввода бекслеша нужно использовать \\. Вы можете проверить длину строки "\\\\", она равна 2. (Проверка: http://ideone.com/DhxHe8) Это, кстати, возможно, и есть причина странного поведения редактора по отношению к двойному бекслешу.

Ответ 2



Напишите так: s.replace(i, 1, "\\\\");

Ответ 3



Или так: s.replace(i, 1, R"(\)");

Комментариев нет:

Отправить комментарий