C++ 库 boost::split

2024 年 8 月 28 日 | 3 分钟阅读

该函数与 C 语言中的 Strtok 相似。它根据分隔符将输入序列创建为令牌。分隔符通过谓词提供。

语法

应用:这种技术用于将字符串分割成子字符串,并用分隔符将它们分开。

示例

使用 boost::split 函数对提供的字符串进行分词

Boost 为 C++ 标准库提供了强大的工具,用于添加成熟且经过充分测试的库。本文将探讨 boost::split 函数,它是 Boost 字符串算法库的一个组成部分。后者包含许多用于操作字符串的技术,包括剪切和替换。boost::split 函数将字符串序列分割成令牌并用分隔符分隔。第三个参数应该是分隔符,用户应在谓词函数中指定。如果给定的元素是分隔符,则提供的函数必须返回 true。

在下面的示例中,我们提供了一个 isspace 函数对象,用于识别提供的文本中的空格并将其分成令牌。boost::split 还需要一个目标序列容器来保存分词后的子字符串。需要注意的是,函数调用会在第一个参数(即目标容器本身)之后覆盖目标容器的先前内容。

输出

Lorem; ipsum; ; dolor; sit; amet,; consectetur; adipiscing; elit.;

在前面的代码示例中,当两个或多个分隔符彼此靠近时,boost::split 方法会存储空字符串。然而,如果我们将第四个可选参数 boost::token compress 设置为 on,则相邻的分隔符将合并,如以下示例所示。请记住,除非计算机上安装了 Boost 库,否则这两个代码片段将无法工作。

输出

Lorem; ipsum; dolor; sit; amet,; consectetur; adipiscing; elit.;

使用 stringstream 和 getline 函数通过分隔符分割字符串

要改用指定的字符分隔符分割文本,请使用 getline 函数和 stringstream 类。在这种情况下,不需要 Boost 头文件,因为我们只使用 STL 工具。请记住,此版本的代码更长,并且需要额外的步骤来组合相邻的分隔符。

输出

Lorem; ipsum; ; dolor; sit; amet,; consectetur; adipiscing; elit.;

分割

对于一个典型的应用场景,分割算法是查找迭代器的扩展。所有匹配项都由这些算法存储在给定容器中,这些算法使用查找迭代器。提取的子字符串必须能够作为引用(例如迭代器范围)或副本(例如 std::string)存储在此容器中。

提供了两种算法。在输入中,find_all() 查找字符串的每个实例。split() 将输入分成多个部分。