Если строка действительно содержит Unicode (UTF-8), проблема решительно нетривиальна;Вы, вероятно, захотите использовать какую-нибудь внешнюю библиотеку, такую как ICU.Или вы можете преобразовать в wchar_t
(wstring
) и использовать приведенное ниже решение для однобайтового кодирования:
Если символы имеют однобайтовую кодировку, std::find_if
с подходящим предикатом должно сработать.Если вы делаете какой-либо анализ текста, вы захотите определить как набор таких предикатов, раз и навсегда;предикаты могут использовать функции в std::ctype
фасете locale
или в wctype.h
(которые используют глобальную локаль).
Тем не менее, если вы имеете дело с Unicode, даже конвертируя вшироких символов может быть недостаточно, поскольку полный Юникод может по-прежнему использовать более одной кодовой точки для представления одного символа.Вопрос в том, насколько серьезно вы хотите это сделать.(Обратите внимание, что во многих языках, таких как английский или французский, «слова» могут содержать символы, которые Unicode считает пунктуацией, например, «не» или «aujourd'hui» - таблицы Unicode сообщат вам, что '\''
является пунктуацией,не часть слова.)