每周技巧 #10:拆分字符串,而不是吹毛求疵
本节阅读量:本文翻译自 Abseil 官网的 Tip of the Week #10: Splitting Strings, not Hairs。
原文最初作为 totw/10 发布于 2012 年 8 月 16 日。
作者:Greg Miller
更新于 2018 年 1 月 24 日。
“我的脑子里常常有一种奇怪的分裂。”– John Cleese
把字符串拆成子串,是任何通用编程语言里都很常见的任务,C++ 也不例外。当 Google 需要做这件事时,许多工程师发现自己得在自然生长出来的头文件里,穿过一片拆分函数的泥潭。你可能会为了满足自己的需求,寻找输入参数、输出参数和语义的神奇组合。研究完一个 600 多行头文件里的 50 多个函数后,你也许终于选中了一个名字曲折到像 SplitStringViewToDequeOfStringAllowEmpty() 这样的东西。
为了解决这个问题,C++ 库团队实现了一个新的字符串拆分 API,可通过 absl/strings/str_split.h 使用。
这个新 API 用单个 absl::StrSplit() 函数替代了许多拆分函数。这个函数接收待拆分的输入字符串,以及用于拆分的分隔符。absl::StrSplit() 会把返回集合适配成调用方指定的类型。它的实现很高效,因为内部使用 absl::string_view;除非调用方显式要求把结果存入字符串对象集合(这些对象会复制数据),否则不会发生拷贝。
说得够多了,来看几个例子:
|
|
更多信息请查看 absl/strings/str_split.h,了解 Split API 的使用细节;也可以查看 absl/strings/str_split_test.cc 获取更多示例。
感谢阅读。现在我真的得 split 了……