2010-09-17 3 views
2

Je dois vérifier si mon objet CString dans MFC se termine par une chaîne spécifique.utilisant l'algorithme de chaîne boost avec MFC CString pour vérifier la fin d'une chaîne

Je sais que boost::algorithm a de nombreuses fonctions destinées à la manipulation de chaînes et que dans l'en-tête boost/algorithm/string/predicate.hpp pourrait-il être utilisé à cette fin. J'utilise habituellement cette bibliothèque avec std::string. Connaissez-vous un moyen pratique d'utiliser cette bibliothèque avec CString?

Je sais que la bibliothèque est générique et peut également être utilisée avec d'autres bibliothèques de chaînes utilisées comme arguments de modèle, mais il n'est pas clair (et si possible) d'appliquer cette fonctionnalité à CString.

Pouvez-vous m'aider avec cela au cas où c'est possible?

Répondre

0

Pourquoi ne pas vous épargner le problème et simplement utiliser CStringT::Right?

+0

:) C'est vrai! :) –

2

Selon Boost String Algorithms Library, « consulter le design chapitre pour voir les spécifications précises des types de chaîne pris en charge », qui dit entre autres choses, « première exigence de type de chaîne est qu'il doit [être] accessible à l'aide Boost.Range », et la note en bas, l'implémentation MFC/ATL écrite par Shunsuke Sogame qui devrait vous permettre de combiner des bibliothèques.

Edit: Puisque vous mentionnez regex dans les commentaires ci-dessous, cela est tout ce que vous avez vraiment besoin de faire (en supposant une version unicode):

CString inputString; 
wcmatch matchGroups; 
wregex yourRegex(L"^(.*)$"), regex::icase); 
if (regex_search(static_cast<LPCWSTR>(inputString), matchGroups, yourRegex)) 
{ 
    CString firstCapture = matchGroups[1].str().c_str(); 
} 

Notez comment nous réduisons les différents types de chaînes à des pointeurs premières pour passer entre les bibliothèques. Remplacez mon yourRegex artificiel avec vos exigences, y compris si vous ignorez la casse ou êtes explicite au sujet des ancres.

+0

Merci Sean! Je vais y jeter un coup d'œil et l'exploiter. Juste pour partager maintenant j'utilise boost :: regex avec MFC String. Ils l'ont spécialisé pour MFC String et je regarde

+0

Vraiment, vous avez juste besoin d'exploiter le fait que tous les conteneurs de chaînes peuvent être réduits à un pointeur brut, donc dans ce cas passer le CString directement mais utilisez un 'static_cast ()' dessus. –

Questions connexes