Ho un vector<string> vectorStrings
con valori: ta, bc, ac, st, cer, cda
. Voglio trovare la prima occorrenza di qualsiasi stringa nel vettore in una stringa di input.Trova la prima occorrenza di una stringa da un vettore <string>
ad es.
InputStr = "this certainly helps";
delle stringhe riportate nel vettore, vorrei un modo per dire "cer"
è stata la prima occorrenza in posizione 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
Questa implementazione funziona, ma vorrei sapere se esiste un modo più elegante per fare questo con le librerie Boost o librerie std.
Sto lavorando su Windows e utilizzando Visual Studio 2010.
Non so su eleganti, ma penso che il ciclo esterno dovrebbe andare oltre i caratteri stringa e il ciclo interno (nel tuo caso - trova) sulle stringhe nel tuo vettore. Penso che sarebbe più efficiente –
Si potrebbe fare min 'string :: size_type min = string :: npos;' (che potrebbe anche consentire di sbarazzarsi del test 'pos == npos'). – UncleBens
È possibile utilizzare un iteratore. ;) –