是否有一种简单的方法来逃避字符串中\
的所有出现?我从以下字符串开始:
#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 answer。另一种选择是使用boost::regex("\p{cntrl}")
。但是,我还没有找到一个适用于未知(错误)转义序列的文件。
答案 0 :(得分:6)
您可以使用原始字符串文字。见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
答案 1 :(得分:1)
无法将字符串文字a\b\c\d
转换为a\\b\\c\\d
,即转义反斜杠。
为什么呢?由于编译器分别将\c
和\d
直接转换为c
和d
,因此会向您发出有关Unknown escape sequence \c
和Unknown escape sequence \d
({{ 1}}很好,因为它是一个有效的转义序列)。在你有机会使用它之前,这直接发生在字符串文字上。
要看到这一点,你可以编译成汇编程序
\b
您将在汇编程序代码中的某处找到以下行:
gcc -S main.cpp
因此,您的问题是在解析函数中,或者您使用字符串文字进行试验,而您应该使用原始字符串.string "a\bcd"
。