在C++中用向前斜杠或双向后斜杠替换反斜杠

Ric*_*nop 5 c++ visual-c++

所以我有一个字符串:

string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug";
Run Code Online (Sandbox Code Playgroud)

我想用正向替换它中的所有反斜杠,所以它看起来像:

C:/Users/Richard/Documents/Visual Studio 2010/Projects/Client/Debug
Run Code Online (Sandbox Code Playgroud)

这不起作用:

string toReplace = "\\";
path.replace(path.find(toReplace), toReplace.length(), "/");
Run Code Online (Sandbox Code Playgroud)

显然,\是一个转义字符,因此可能导致问题.

Fre*_*son 16

path用g ++ 在你的字符串上遇到编译器错误,因为它包含无效的转义码.显然,MSVC会发出警告但没有错误(参见Michael Burr的回答).因此,如果您确实使用了path已发布的内容,请将反斜杠更改为双反斜杠.

纠正这个问题,我发现你的代码只替换了第一个反斜杠,而其他代码则不然.也许你想使用std::replace(),像这样:

std::replace(path.begin(), path.end(), '\\', '/');
Run Code Online (Sandbox Code Playgroud)

  • 我认为这不会起作用.`std :: replace`将查找\字符,但它不会在字符串中找到任何字符,因为编译器会将每个\解释为后面的字母的转义字符. (4认同)

Paw*_*cki 9

如果您有这样的事情:

string path = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\Client\Debug";
Run Code Online (Sandbox Code Playgroud)

'\'所取得的每一个角色都是特殊的角色.正确的方法是

string path = "C:\\Users\\Richard\\Documents\\Visual Studio 2010\\Projects\\Client\\Debug";
Run Code Online (Sandbox Code Playgroud)

像弗雷德说的那样使用std :: replace.