如何在 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

然后文字将包含您期望的字符。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...