string_algo/rangesを使用してサブストリング用のcストリングの配列を検索する

StackOverflow https://stackoverflow.com/questions/8312975

  •  25-10-2019
  •  | 
  •  

質問

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から必要なタイプをどのように抽出できるかということです。

編集:

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");
}
役に立ちましたか?

解決

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]

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top