c++ - 将空终止字节字符串转换为原始字符串文字

标签 c++

免责声明:我最近才开始使用 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/

相关文章:

C++ makefile多个 header 一个cpp

c++ - Tcl 脚本非检测调试器使用 Tcl 库和/或 Tcl 内部?

c++ - 如何将整个 C++ 命名空间放置在特定的内存位置?

C++:检查是否引用了地址

c++ - 旧版 MFC 代码 (2005) 无法在 VC 2010 上编译

c++ - 在不同线程上时,cv::imshow 不显示 cv::mat 颜色

c++ - 派生类中的功能与基类中的功能完全相同,但默认参数不同

c++ - 如何将 OpenBlas Lapacke 与 Rcpp 一起使用

c++ - 解析为 x3::variant 时出现编译器错误

c++ - 访客模式。 void* 是完全抽象接口(interface)可接受的返回类型吗?