Заменить обратную косую черту на прямую или двойную обратную косую черту в C ++ - PullRequest
5 голосов
/ 15 декабря 2010

Итак, у меня есть строка:

string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug";

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

C:/Users/Richard/Documents/Visual Studio 2010/Projects/Client/Debug

Это не работает:

string toReplace = "\\";
path.replace(path.find(toReplace), toReplace.length(), "/");

Очевидно, \ является escape-символом, что, вероятно, вызывает проблему.

Ответы [ 5 ]

16 голосов
/ 15 декабря 2010

Я получаю ошибку компилятора в вашей строке path с g ++, поскольку она содержит недопустимые управляющие коды.По всей видимости, MSVC выдает предупреждения, но ошибок для этого нет (см. Ответ Майкла Барра).Поэтому, если вы действительно используете опубликованную path, измените обратную косую черту на двойную обратную.

Исправляя это, я обнаружил, что ваш код заменяет только первую обратную косую черту и оставляет другие.Может быть, вы хотите использовать std::replace(), вот так:

std::replace(path.begin(), path.end(), '\\', '/');
9 голосов
/ 15 декабря 2010

Если у вас есть что-то вроде этого:

string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug";

, то каждый символ, обработанный символом \, является специальным символом.Правильный путь:

string path = "C:\\Users\\Richard\\Documents\\Visual Studio 2010\\Projects\\Client\\Debug";

Используйте std :: replace, как сказал Фред.

2 голосов
/ 15 декабря 2010

Насколько я знаю, нет способа сделать это из указанной вами строки.Ваш код пытается экранировать символы U, R, D, V, P и т. Д.

Если строка жестко запрограммирована, вам придется использоватьдвойная косая черта (т. е. C:\\Users\\Richard...).

Если строка представляет собой путь, который, скажем, вводит пользователь, возможно, вы сможете добавить escape-символы программно.

2 голосов
/ 15 декабря 2010

Является ли "string path = ..." в вашем исходном файле как показано?Если это так, то нет обратной косой черты для замены.

Следующая программа:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug";

    cout << path;
}

Выходы:

C:UsersRichardDocumentsVisual Studio 2010ProjectsClientDebug

Примечание.(с кучей предупреждений) в MSVC (через VS2010), но с GCC 4.5.1 я получаю ошибку:

C:\temp\test.cpp:8:19: error: incomplete universal character name \U

Поведение MSVC для этой ошибки (или GCC в этом отношении) можетнастраивается с помощью соответствующих параметров.

0 голосов
/ 15 декабря 2010

Попробуйте использовать string.findfirsof ('\');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...