использование алгоритма форсированной строки с MFC CString для проверки конца строки - PullRequest
2 голосов
/ 17 сентября 2010

Мне нужно проверить, заканчивается ли мой CString объект в MFC конкретной строкой.

Я знаю, что boost::algorithm имеет много функций, предназначенных для манипуляции со строками, и что в заголовке boost/algorithm/string/predicate.hpp может быть использовано для этой цели.

Я обычно использую эту библиотеку с std::string. Знаете ли вы удобный способ использовать эту библиотеку также с CString?

Я знаю, что библиотека является общей, и ее можно использовать также с другими строковыми библиотеками, используемыми в качестве аргументов шаблона, но неясно (и возможно ли) применить эту функцию к CString.

Можете ли вы помочь мне с этим, если это возможно?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Согласно библиотеке Boost String Algorithms , «обратитесь к главе design , чтобы увидеть точную спецификацию поддерживаемых типов строк», в которой, среди прочего, сказано «первое требование типа строки является то, что он должен быть [доступен], используя Boost.Range", и обратите внимание на реализацию MFC / ATL , написанную Shunsuke Sogame, которая должна позволять вам объединять библиотеки.

Редактировать: Поскольку вы упоминаете регулярное выражение в комментариях ниже, это все, что вам действительно нужно сделать (при условии сборки в юникоде):

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();
}

Обратите внимание, как мы сокращаем различные типы строк до необработанных указателей, чтобы передавать их между библиотеками. Замените мою надуманную yourRegex вашими требованиями, включая то, игнорируете ли вы регистр или нет в отношении якорей.

0 голосов
/ 17 сентября 2010

Почему бы вам не избавить себя от неприятностей и просто использовать CStringT :: Right ?

...