免责声明:我最近才开始使用 C++,我仍在努力理解它的基本概念。
例如,我们必须执行以下语句:
std::cout << "^\\s+Encryption key:(\\w+)" << '\n' <<
"^\\s+Quality=(\\d+)" << '\n' <<
"^\\s+E?SSID:\"([[:print:]]+)\"" << '\n' <<
"^\\s+ssid=\"([[:print:]]+)\"" << '\n';
如何将其转换为单个原始字符串文字?我试图尽可能多地阅读有关该主题的信息,但似乎无法弄清楚该怎么做。谁能指出我正确的方向?
我理解 )"
不能直接在 RSL 中使用。
最佳答案
您可以在原始字符串文字中使用 (
和 )
。您只需指定开始/停止定界符序列,这样您就不会在字符串中获得以 )
开头的定界符序列。始终附加空字符。参见 cppreference string literal documentation了解详情。
在下面的示例中,###
是分隔符,但您可以选择任何您想要的(除了这些字符是不允许的:()\
,和长度必须为 16 个字符或更少)。只需选择不会导致您意外过早终止文字的内容即可。
以 ###
作为分隔符,编译器将继续使用文本作为原始字符串文字的一部分,直到遇到组合 )###"
,所以从技术上讲,您可以在文本中使用 )###
而不终止原始字符串文字,但我认为最好谨慎行事——如果恰好有"
紧接在该序列之后。我还会避免在文本正文中分隔符后跟 (
的情况 - ###(
在这个例子中。这是允许的,但可以让阅读程序的人感到困惑。
这可能是
std::cout << R"###(^\s+Encryption key:(\w+)
^\s+Quality=(\d+)
^\s+E?SSID:"([[:print:]]+)"
^\s+ssid="([[:print:]]+)"
)###" ;
在原始字符串文字中,您不会转义字符,因此 \\
变为 \
而 \"
变为 "
在你的例子中, \n
成为实际的换行符。
关于c++ - 将空终止字节字符串转换为原始字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338617/