0

我需要在一个 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");
}
4

1 回答 1

0

我可以更正 StringTest4 以进行完全匹配,但是此解决方案不适用于部分匹配。

void StringTest4()
{
    boost::range_iterator<const char [12][20]>::type sptr = std::find(boost::begin(Months), boost::end(Months), std::string("February"));
    if (sptr)
    {
        string sResult(*sptr);
    }
}

注意 std::string 的传递,而不是"February"如果我们不这样做,那么std::find只会进行指针比较,因此会导致失败。

我仍然希望将它与 string_algo 一起使用,但我仍然不确定我需要哪些位才能成功使用它const char Months[12][20]

于 2011-11-30T16:42:23.000 回答