c++ - utilizando el algoritmo de cadena de impulso con MFC CString para verificar el final de una cadena
boost (2)
Necesito comprobar si mi objeto CString
en MFC
termina con una cadena específica.
Sé que el boost::algorithm
tiene muchas funciones para la manipulación de cadenas y que en el encabezado boost/algorithm/string/predicate.hpp
podría usarse para ese propósito.
Usualmente uso esta biblioteca con std::string
. ¿Conoces una forma conveniente de usar esta biblioteca también con CString
?
Sé que la biblioteca es genérica y puede usarse también con otras bibliotecas de cadenas utilizadas como argumentos de plantilla, pero no está claro (y si es posible) aplicar esta característica a CString
.
¿Me pueden ayudar con eso en caso de que sea posible?
¿Por qué no te ahorras el problema y solo usas CStringT :: Right ?
Según Boost String Algorithms Library , "consulte el capítulo de diseño para ver la especificación precisa de los tipos de cadenas compatibles", que dice, entre otras cosas, que "el primer requisito del tipo de cadena es que debe [ser] accesible usando Boost.Range ", y observe en la parte inferior la implementación de MFC / ATL escrita por Shunsuke Sogame que debería permitirle combinar bibliotecas.
Editar: como mencionas regex en los comentarios a continuación, esto es todo lo que necesitas hacer (suponiendo una compilación 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();
}
Tenga en cuenta cómo reducimos los diferentes tipos de cadenas a punteros sin formato para pasarlos entre las bibliotecas. Reemplace mi ideado yourRegex
con sus requisitos, incluyendo si ignora o no el caso o si es explícito sobre los anclajes.