c++字符串:如何替换未转义的反斜杠
C++ string: How to replace unescaped backslash?
我正在阅读一些日志文件。Windows的日志中包含C:somepath
等路径
当我用std::getline
读取时,我得到一个包含未转义反斜杠的字符串。我如何用正斜杠代替它们?
我试着
std::replace(str.begin(), str.end(), '', '/');
,但结果看起来像C:somepath
而不是C:/some/path
。
如何用/
或\
替换 ?
这个字符串然后被用来构建一个JSON对象,所以不替换反斜杠会导致无效的JSON对象。
您尝试的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;
}
我不知道你遇到了什么问题——至少对我来说,这似乎工作得很好。当然,这只有作为更大程序的一部分才有意义。如果要单独执行此操作,tr
将完全足够。如果您确实需要将其编写成一个程序,那么SNOBOL将比C或c++更容易完成这项工作:
loop: INPUT "" = '/' . OUTPUT : s(loop)
转义字符如换行使用'n'
或反斜杠如''
只用于字面量,即常量字符串和字符在你的代码。在字符串或字符变量中,没有对反斜杠的特殊处理。
这是因为字符串或字符常量中的反斜杠在编译时由编译器处理。在运行时什么也不做。
所以你的问题的解决方法就是什么都不做。
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 初始化 std::vector 替换为单大括号而不是双大括号
- 如何在C++中将 Python 字符串转换为其转义版本?
- 删除/替换C++字符串中的多字符 (ÿû)
- 将 malloc 替换为数组
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何在C++中用'\'替换''来处理转义序列?
- 替换密码:哪一个?
- LPCWSTR 查找和替换为转义字符
- 使用 RE2::全局替换的转义字符串
- c++字符串:如何替换未转义的反斜杠