C++ C++;字符串:如何替换未替换的反斜杠?
我正在读一些日志文件。Windows的日志包含类似于C++ C++;字符串:如何替换未替换的反斜杠?,c++,string,escaping,stdstring,backslash,C++,String,Escaping,Stdstring,Backslash,我正在读一些日志文件。Windows的日志包含类似于C:\some\path的路径 当我使用std::getline阅读时,会得到一个包含未替换反斜杠的字符串。如何用正斜杠替换它们 我试过了 std::replace(str.begin(), str.end(), '\\', '/'); 但是结果看起来像是C:somepath,而不是C:/some/path 如何用/或\替换\ 然后,此字符串用于构建JSON对象,因此不替换反斜杠将导致JSON对象无效。使用'\n'或类似反斜杠的换行符换行符换
C:\some\path
的路径
当我使用std::getline
阅读时,会得到一个包含未替换反斜杠的字符串。如何用正斜杠替换它们
我试过了
std::replace(str.begin(), str.end(), '\\', '/');
但是结果看起来像是C:somepath
,而不是C:/some/path
如何用/
或\
替换\
然后,此字符串用于构建JSON对象,因此不替换反斜杠将导致JSON对象无效。使用
'\n'
或类似反斜杠的换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换行符换。在字符串或字符变量中,没有反斜杠的特殊处理
这是因为字符串或字符文本常量中的反斜杠在编译时由编译器处理。运行时不执行任何操作
因此,问题的解决方案实际上是什么都不做。您尝试的
std::replace
调用完全有效,应该完全按照您的要求执行,因此生成的字符串不包含任何斜杠的唯一原因是没有任何类型的斜杠
我建议使用调试器来确定字符串在整个生命周期中发生了什么好的,因此这是为了转换为JSON,其中反斜杠需要以某种方式或其他方式进行修改(显然,在这种情况下可以转换为正斜杠,否则需要将反斜杠加倍以转义) 你的基本想法应该行得通——简单地用一个
/
替换每个\\
应该很容易
#include <iostream>
#include <algorithm>
#include <string>
#include <cassert>
int main() {
std::string in{"a\\b\\c\\d"};
std::replace(in.begin(), in.end(), '\\', '/');
assert(in == "a/b/c/d");
std::cout << in;
}
实际上,我正在使用这些内容构建一个JSON对象。不做任何事情都不是一个选项,因为生成的JSON对象将无效。@KarthikKrishnaswamy这就是为什么不仅要向您的解决方案寻求帮助,而且要描述解决方案所针对的实际问题(也称为)。Jerry,感谢您指出缺少用例的原因。我已经更新了问题(见上文)。我使用字符串构建JSON对象,因此不替换反斜杠会导致JSON对象无效
loop: INPUT "\" = '/' . OUTPUT : s(loop)