微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 C++ 中读取反斜杠作为字符串的一部分

如何解决如何在 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 举报,一经查实,本站将立刻删除。