免责声明:我最近才开始使用C++,我仍在尝试理解它的基本概念。
例如,我们必须遵循以下语句:
std::cout << "^\s+Encryption key:(\w+)" << 'n' <<
"^\s+Quality=(\d+)" << 'n' <<
"^\s+E?SSID:"([[:print:]]+)"" << 'n' <<
"^\s+ssid="([[:print:]]+)"" << 'n';
如何将其转换为单个原始字符串文本?我试图尽可能多地阅读有关此主题的信息,但似乎无法弄清楚如何做到这一点。谁能指出我正确的方向?
我知道)"
不能直接在 RSL 中使用。
可以在原始字符串文本中使用(
和)
。您只需指定开始/停止分隔符序列,这样您就不会在字符串中获得前面带有)
的分隔符序列。始终附加空字符。有关详细信息,请参阅 cppreference 字符串文本文档。
在下面的示例中,###
是分隔符,但您可以选择所需的任何字符(不允许使用这些字符:()
,并且长度必须为 16 个字符或更少(。只需选择不会导致您意外过早终止文字的内容即可。
使用###
作为分隔符,编译器将继续使用文本作为原始字符串文本的一部分,直到涉及到组合)###"
,所以从技术上讲,您可以在文本中)###
而不终止原始字符串文字,但我认为最好谨慎行事——如果碰巧在该序列之后立即出现"
,您可能会无意中过早终止文字。我还可以避免在文字正文中(
后跟分隔符的情况 -###(
在本例中。这是允许的,但可能会使阅读该程序的人感到困惑。
所以这可能是
std::cout << R"###(^s+Encryption key:(w+)
^s+Quality=(d+)
^s+E?SSID:"([[:print:]]+)"
^s+ssid="([[:print:]]+)"
)###" ;
在原始字符串文本中,您不会转义字符,因此在您的示例中\
"
变为"
,并且n
成为实际的换行符。