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

时间:2010-12-14 21:36:36

标签: c++ visual-c++

所以我有一个字符串:

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(), "/");

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

5 个答案:

答案 0 :(得分:16)

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

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

std::replace(path.begin(), path.end(), '\\', '/');

答案 1 :(得分:9)

如果你有这样的事情:

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

前面带有'\'的每个字符都是特殊字符。正确的方法是

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

像Fred说的那样使用std :: replace。

答案 2 :(得分:2)

源文件中的“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)的行为可以使用适当的选项进行配置。

答案 3 :(得分:2)

据我所知,没有办法从你指定的字符串中执行此操作。您的代码正在尝试转义字符URDVP等。

如果字符串是硬编码的,则必须使用双斜线(即C:\\Users\\Richard...)。

如果字符串是用户输入的路径,则可以通过编程方式添加转义字符。

答案 4 :(得分:0)

尝试使用string.findfirsof('\');