У меня есть vector<string> vectorStrings
со значениями: ta, bc, ac, st, cer, cda
. Я хочу найти первое вхождение любой из строк в векторе во входной строке.
e.g.
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.
string::size_type min = string::npos;
(что также может позволить вам избавиться от тестаpos == npos
). - person UncleBens   schedule 23.12.2011