所以我有一个字符串:
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(), "/");
显然,\是一个转义字符,因此可能会导致问题。
答案 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)
据我所知,没有办法从你指定的字符串中执行此操作。您的代码正在尝试转义字符U
,R
,D
,V
,P
等。
如果字符串是硬编码的,则必须使用双斜线(即C:\\Users\\Richard...
)。
如果字符串是用户输入的路径,则可以通过编程方式添加转义字符。
答案 4 :(得分:0)
尝试使用string.findfirsof('\');