Как найти символы, которые не могут быть частью слова в строке Unicode? - PullRequest
2 голосов
/ 23 июня 2011

У меня есть какой-то текст в строке, мне нужно проверить, содержит ли эта конкретная строка какие-либо символы, которые не могут составить слово.

Предположим, у меня есть текст вроде "(привет}"

Здесь он содержит символы '(' и '}'. Как я могу это сделать в C ++. И строка может содержать любой символ Unicode.

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

Если строка действительно содержит Unicode (UTF-8), проблема решительно нетривиальна;Вы, вероятно, захотите использовать какую-нибудь внешнюю библиотеку, такую ​​как ICU.Или вы можете преобразовать в wchar_t (wstring) и использовать приведенное ниже решение для однобайтового кодирования:

Если символы имеют однобайтовую кодировку, std::find_if с подходящим предикатом должно сработать.Если вы делаете какой-либо анализ текста, вы захотите определить как набор таких предикатов, раз и навсегда;предикаты могут использовать функции в std::ctype фасете locale или в wctype.h (которые используют глобальную локаль).

Тем не менее, если вы имеете дело с Unicode, даже конвертируя вшироких символов может быть недостаточно, поскольку полный Юникод может по-прежнему использовать более одной кодовой точки для представления одного символа.Вопрос в том, насколько серьезно вы хотите это сделать.(Обратите внимание, что во многих языках, таких как английский или французский, «слова» могут содержать символы, которые Unicode считает пунктуацией, например, «не» или «aujourd'hui» - таблицы Unicode сообщат вам, что '\'' является пунктуацией,не часть слова.)

1 голос
/ 23 июня 2011

std::isalpha (и связанные is* друзья) настроены на тип персонажа И принимают локаль, чтобы улучшить возможности локализации.Я просто перебрал бы string или wstring и использовал бы функции is*, которые указывают на поведение, которое вас интересует (я не могу сказать, какие символы вы хотите разрешить и запретить в выражении задачи).

0 голосов
/ 23 июня 2011

Используйте std::wstring и std::iswalpha().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...