使用string_algo / ranges搜索子字符串的c字符串数组

时间:2011-11-29 15:02:54

标签: boost cstring string-algorithm

我需要搜索一个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所需的类型。

修改

我看到我错误地使用了结尾。然后,我设法得到稍微不同的示例,但它们与我实际必须使用的定义不兼容(我可以添加到代码但不更改现有定义)。

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");
}

0 个答案:

没有答案