我的char数据类型包含一个带有双斜杠的目录。我想将双斜杠替换为四个斜杠,以便我的输出将是双斜杠。我尝试了很多解决方案,但没有任何效果。
char *str = "C:\\Users\\user\\desktop";
for(int i = 0;i < strlen(str) ; i++)
if(str[i] == '\\')
str[i] =='\\\\';
此代码的输出显示'C:\ Users \ user \ desktop'。
答案 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 。你确定你真的需要加倍斜线吗?这可能是有原因的,但我无法想到一个问题。