gpt4 book ai didi

c++ - 使用 boost range_iterator 数组拆分字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:47 26 4
gpt4 key购买 nike

我想在 C++ 中按给定固定长度(例如 15 个字符)的 block 处理一个无限长的字符串。

字符串是负责处理它的类的一个属性(我们称类为“Person”和属性“_description”),外部代码必须调用一个方法来顺序处理每个 block ,例如人::过程描述()。另一种方法允许查看是否还有一个 block 要处理,例如Person::isThereMoreDescriptionToBeProcessed()。

为了避免处理索引和可能的副作用(+1/-1 错误,init..),有人建议我存储一个 range_iterators (boost) 数组并迭代它们进行处理,但我不这样做'知道 range_iterator 概念和 Boost 文档在这里没有太大帮助。

我想我会存储 2 个项目(例如 _currentItem 和 _endItem)作为 Person 的属性并进行如下检查

_currentItem == _endItem

在 isThereMoreDescriptionToBeProcessed() 中,我想我会做类似的事情

_currentItem++

在 processDescription() 的末尾,但我无法理解如何为此目的在 _description 属性的初始化处填充范围迭代器数组以及如何获取要在 processDescription() 中处理的字符串.

感谢您对此进行说明。

最佳答案

给定两个迭代器,您希望从中创建一个范围,您只需构建一个 boost::iterator_range 并将这两个迭代器作为构造函数参数传递。

下面的代码将 str 分成三个字符段,并将每个段插入 ranges

std::vector<boost::iterator_range<std::string::iterator>> ranges;
std::string str = "abcdefghijk";

auto it = str.begin();
auto lastIt = it;
while (it != str.end())
{
lastIt = it;
if (std::distance(it, str.end()) < 3)
it = str.end();
else
std::advance(it, 3);

ranges.push_back(
boost::iterator_range<std::string::iterator>(lastIt, it)
);
}

for (auto segment = ranges.begin(); segment != ranges.end(); ++segment)
std::cout << std::string(segment->begin(), segment->end()) << std::endl;

关于c++ - 使用 boost range_iterator 数组拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com