将双斜杠替换为四斜杠

时间:2013-12-28 03:46:15

标签: c++ replace backslash

我的char数据类型包含一个带有双斜杠的目录。我想将双斜杠替换为四个斜杠,以便我的输出将是双斜杠。我尝试了很多解决方案,但没有任何效果。

char *str = "C:\\Users\\user\\desktop";
for(int i = 0;i < strlen(str) ; i++)
    if(str[i] == '\\')  
    str[i] =='\\\\'; 

此代码的输出显示'C:\ Users \ user \ desktop'。

2 个答案:

答案 0 :(得分:3)

首先,由于您使用的是c ++,请考虑使用std::string。修改字符串文字是未定义的行为(将字符串文字复制到缓冲区中,或者首先使用char []std::string。)

其次,字符串文字必须用双引号括起来。

第三,你需要为每个反斜杠转义两组反斜杠。 \\\\变为\\


这应该可以解决问题:

std::string s("C:\\Users\\user\\desktop");
auto it = std::find(s.begin(), s.end(), '\\');
while (it != s.end()) {
    auto it2 = s.insert(it, '\\');

    // skip over the slashes we just inserted
    it = std::find(it2+2, s.end(), '\\');
}
std::cout << s; // C:\\Users\\user\\desktop

答案 1 :(得分:0)

所以第一句话不正确 - 你有一个双斜杠的目录。字符串文字中的\\仅表示实际字符串中的单个字符。

如果您确实想要这样做,则单个替换将无效,因为这将覆盖您的下一个角色。你必须构建一个全新的字符串,一次移动一个字符(偶尔会在输出中写一个额外的字符)。

然而,我怀疑在前一句话中有一个非常大的 If 。你确定你真的需要加倍斜线吗?这可能是有原因的,但我无法想到一个问题。