Tengo un vector<string> vectorStrings
con valores: ta, bc, ac, st, cer, cda
. Quiero encontrar la primera aparición de cualquiera de las cadenas en el vector en una cadena de entrada.Encontrar la primera aparición de una cadena de un vector <string>
p. Ej.
InputStr = "this certainly helps";
de la cadena indicada en el vector, me gustaría una manera de decir "cer"
fue la primera vez que aparece en la posición 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
Esta aplicación funciona, pero me gustaría saber si existe una forma más elegante de hacer esto con bibliotecas Boost o biblioteca std.
estoy trabajando en Windows y utilizando Visual Studio 2010.
No sé acerca elegante, pero creo que el bucle exterior debe pasar los caracteres de cadena y el bucle interno (en su caso, busque) sobre las cadenas de su vector. Creo que sería más eficiente –
Puede hacer min 'string :: size_type min = string :: npos;' (que también podría permitirle deshacerse de la prueba 'pos == npos'). – UncleBens
Puede usar un iterador. ;) –