の値を持つvector<string> vectorStrings
があります。私は、入力文字列中のベクトル中の文字列のどれかが最初に出現するのを発見したい。ベクトルからの最初の文字列の検索<string>
ベクトル内の指定された文字列の
InputStr = "this certainly helps";
は、私が"cer"
を言うための方法は、位置5
で最初に出現したのでしょう。
int min = 9999999;
string first;
for(int i = 0; i < vectorStrings.size(); i++)
{
int pos = InputStr.find(vectorStrings[i]);
if(pos == string::npos)
continue;
if(pos < min)
{
min = pos;
first = vectorStrings[i];
}
}
// values of min and first gives which string occurred first
// and at the position of it in the input string
この実装では動作しますが、私はブーストライブラリやSTDライブラリでこれを行うために、よりエレガントな方法が存在するかどうかを知りたいでしょう。私は、Windows上で作業して、私は、このタスクのための一般的なブーストアルゴリズムを知らないのVisual Studio 2010
私はエレガントなことは知らないが、私は外側のループが終わって行くべきだと思いますあなたのベクトルの文字列の文字列と内側のループ(あなたの場合は - find)。もっと効率的だと思います。 –
min :: string :: size_type min = string :: npos; '(これは' pos == npos'テストを取り除くこともできます)。 – UncleBens
イテレータを使用できます。 ;) –