C++ 转义字符串中出现的\

标签 c++ string c++11

是否有一种简单的方法来转义字符串中所有出现的 \ ?我从以下字符串开始:

#include <string>
#include <iostream>

std::string escapeSlashes(std::string str) {
    // I have no idea what to do here
    return str;
}

int main () {
    std::string str = "a\b\c\d";

    std::cout << escapeSlashes(str) << "\n";
    // Desired output:
    // a\\b\\c\\d

    return 0;
}

基本上,我正在寻找 this 的逆函数问题。问题是我无法在字符串中搜索 \,因为 C++ 已经将其视为转义序列。

注意: 我无法首先更改字符串 str。它是从 LaTeX 文件解析而来的。因此,this类似问题的答案不适用。 编辑:由于不相关的问题导致解析失败,这里的问题是关于字符串文字的。

编辑:有一些很好的解决方案可以查找和替换已知的转义序列,例如 this回答。另一种选择是使用 boost::regex("\p{cntrl}")。但是,我还没有找到适用于未知(错误)转义序列的方法。

最佳答案

您可以使用原始字符串文字。参见 http://en.cppreference.com/w/cpp/language/string_literal

#include <string>
#include <iostream>

int main() {
    std::string str = R"(a\b\c\d)";

    std::cout << str << "\n";
    return 0;
}

输出:

a\b\c\d

关于C++ 转义字符串中出现的\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49426465/

相关文章:

C++ 析构函数行为

c# - 将 JSON 字符串转换为 JSON 对象 c#

java - 字符串无法转换为int数组和ASCII

c++ - std::ostream {又名 std::basic_ostream<char>} Ivalue 为 'std::basic_ostream<char>&&

c++ - 为什么 std::atomic_compare_exchange 更新期望值?

c++ - 非静态全局变量与全局静态 __thread 变量

c++ - 我怎么会空,没有抓包?

python - 在 Python 中,为什么压缩元素在添加到列表时会分开?

c++ - 为什么 mersenne_twister_engine 保证某些结果?

c++ - g++ 对 -Ofast 做了哪些额外的优化?