我需要在一个 c 字符串数组中搜索一个子字符串。
我创造了我认为会给我答案的东西,但它只是在语法上正确但在语义上是错误的,但我不确定我哪里出错了。
对此还有一个子问题。在向您展示我尝试过的示例后,我会问这个问题。
#include <boost/algorithm/string/find.hpp>
const char Months[12][20] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
void Test()
{
typedef boost::iterator_range<boost::range_iterator<const char [20]>::type > constCharRange;
boost::iterator_range<char const *> ir = find_first("January", months);
}
ir.first == ir.last
迭代器的结果表明我没有正确写这个。
我不确定第一个参数实际上const char [8]
是否会产生不利影响。
我的主要问题是我应该如何纠正它,补充问题是如何从 constCharRange 或任何此类 typedef 中提取 find_first 所需的类型。
编辑:
我看到我错误地使用了 end 。然后,我设法获得了稍微不同的示例来工作,但是它们与我实际必须使用的定义不兼容(我可以添加到代码中,但不能更改现有定义)。
const std::string Months[]= { /*same data as before*/
void StringTest2()
{
const std::string* sptr =0;
sptr = std::find(boost::begin(Months), boost::end(Months), std::string("February"));
if (sptr)
{
string sResult(*sptr);
}
}
另一个测试
const char* Months[]= { /*same data as before*/
void StringTest3()
{
const char **sptr = std::find(boost::begin(Months), boost::end(Months), "February");
if (sptr)
{
string sResult(*sptr);
}
}
这是我能得到的最接近的值,但我似乎无法正确获取返回类型规范
void StringTest4()
{
const char Months[12][20]Months[]= { /*same data as before*/
std::find(boost::begin(Months), boost::end(Months), "February");
}