Eh bien d'abord, l'option la plus simple si vous allez chercher la dernière occurrence d'une sous-chaîne est d'utiliser std::string::rfind
:
std::string str = "Hello, World!";
int index = str.rfind("o");
Si vous devez utiliser Boost parce que vous voulez que cela fonctionne sur plages génériques, utilisez boost::algorithm::find_last
. Cela prend deux plages. La deuxième plage est recherchée dans la première plage.
std::string str = "Hello, World!";
iterator_range<std::string::iterator> it = find_last(str, "o");
int index = std::distance(str.begin(), it.begin());
Si vous voulez vraiment à l'utilisateur un viseur, il semble que vous cherchez boost::algorithm::last_finder
. Les trouveurs retournent un objet fonction qui prend deux itérateurs comme arguments. La fonction renvoie un iterator_range
Vous pouvez l'utiliser comme suit:
auto finder = last_finder("o");
std::string str = "Hello, World!";
iterator_range<std::string::iterator> it = finder(str.begin(), str.end());
int index = std::distance(str.begin(), it.begin());
Pouvez-vous expliquer votre cas d'utilisation. Pourquoi avez-vous besoin d'une instance finder au lieu d'utiliser la fonction explicite standard (ou boost) pour trouver le dernier index d'un caractère ou d'un modèle? Si vous voulez juste une fonction qui fonctionne pour trouver le dernier index d'un pattern, utilisez la solution @sftrabbit postée. –
@ViteFalcon Oui, je cherche une fonction en boost qui trouve le dernier index d'un pattern et qui a choisi d'utiliser la solution postée. – Mushy