如何解决如何在 C++ 中读取反斜杠作为字符串的一部分
我试图将反斜杠作为字符串的一部分读取,但它总是被转义。
例如:
string s = "Bo\nes"
for(int i = 0; i < s.size(); i++) {
if (s[i] == '\\') cout << "Found a backslash";
}
那行不通。在其他测试中,我总是将字符串读取为“Boes”。我如何才能读取该反斜杠以便解析整个字符串?
解决方法
您必须对原始字符串中的反斜杠进行转义。
string s = "Bo\\nes";
否则,字符串中没有反斜杠字符进行比较。
,这里是例子
std::string s1 = "Bo\\nes";
std::string s2 = R"(Bo\nes)";
也就是说,您必须对反斜杠字符或原始字符串文字使用转义序列 '\\'
。
这是一个演示程序。
#include <iostream>
int main()
{
std::string s1 = "Bo\\nes";
std::string s2 = R"(Bo\nes)";
std::cout << "\"" << s1 << "\"\n";
std::cout << "\"" << s2 << "\"\n";
return 0;
}
它的输出是
"Bo\nes"
"Bo\nes"
另一种方法是使用八进制或十六进制转义序列,例如
std::string s = "Bo\134nes";
或
std::string s = "Bo\x5Cnes";
,
在字符串/字符文字中,print 'Install the following library to make this script work'
print 'Impacket : https://github.com/CoreSecurity/impacket.git'
print 'PyCrypto : https://pypi.python.org/pypi/pycrypto'
是换行符的 escape sequence(十进制 \n
,十六进制 10
),而 0x0A
是换行符单个 \\
字符的转义序列(十进制 \
,十六进制 92
)。
因此,在字符串文字 0x5C
中,字符串中没有 "Bo\nes"
字符。它包含以下字符:
\
B
o
\n
e
(s
)
不是这些字符,如您所料:
0x42 0x6F 0x0A 0x64 0x73
B
o
\
n
e
(s
)
这就是为什么 0x42 0x6F 0x5C 0x6E 0x64 0x73
(又名 if (s[i] == '\\')
)总是错误的。
您需要转义 if (s[i] == 0x5C)
中的 \
才能完成您想要的:
\n
然后文字将包含您期望的字符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。