У меня есть vector<string> vectorStrings
со значениями: ta, bc, ac, st, cer, cda
. Я хочу найти первое вхождение любой из строк в векторе во входной строке.Найти первое вхождение строки из вектора <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
Эта реализация работает, но я хотел бы знать, если существует более элегантный способ сделать это с библиотеками повышения или станд библиотеки.
Я работаю на Windows, и с помощью Visual Studio 2010.
Я не знаю о элегантно, но я думаю, что внешний контур должен перейти строковые символы и внутренний цикл (в вашем случае - найти) по строкам в вашем векторе. Я думаю, что было бы более эффективно –
Вы могли бы сделать min 'string :: size_type min = string :: npos;' (что также может позволить вам избавиться от теста 'pos == npos'). – UncleBens
Вы можете использовать итератор. ;) –