c – (How)我可以使用带有c字符串(char指针)的Boost字符串算法库吗?

前端之家收集整理的这篇文章主要介绍了c – (How)我可以使用带有c字符串(char指针)的Boost字符串算法库吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有可能以某种方式调整c风格的字符串/缓冲区(char *或wchar_t *)来使用 Boost String Algorithms Library吗?

也就是说,例如,它的trimalgorithm有以下声明:

template<typename SequenceT> 
void trim(SequenceT &,const std::locale & = std::locale());

the implementation(查找trim_left_if)要求序列类型具有成员函数erase.

我怎么能用原始字符指针/ c字符串缓冲区?

char* pStr = getSomeCString(); // example,could also be something like wchar_t buf[256];
...
boost::trim(pStr); // HOW?

理想情况下,算法可以直接在提供的缓冲区上工作. (尽可能.如果算法需要在“字符串”中分配额外的空间,它显然无法工作.)

@Vitaly问道:为什么你不能从char缓冲区创建一个std :: string然后在算法中使用它?

我有char *的原因是我想在我们现有的代码库上使用一些algorthims.将所有char缓冲区重构为字符串将比其值更多的工作,并且当更改或调整某些内容时,能够将给定算法应用于恰好存在于当前代码中的任何c样式字符串将是很好的.

使用字符串意味着(a)将char *复制到字符串,(b)将算法应用于字符串,以及(c)将字符串复制回char缓冲区.

解决方法

对于SequenceT类型的操作,您可能必须使用std :: string.如果你想自己实现它,你必须满足更多的创建,破坏,值语义等要求.你基本上最终会得到std :: string的实现.

但是,RangeT类型的操作可以使用Boost.Range库中的iterator_range在char *上使用.不过,我没试过.

猜你在找的C&C++相关文章