Страница 1 из 3
Как проверить строку?
Добавлено: 13 дек 2015, 13:35
Сионист
Есть строка std::u32string. Требуется проверить на одновременную истинность следующие утверждения:
1. Строка начинается и заканчивается символами, содержащими и фон, и хоть что то ещё, кроме фона.
2. Из остальных символов строка содержит только пробелы (те, что на клавише "пробел").
3. Ни какие два пробела не следуют подряд.
Если хотябы одно из трёх ложно, то надо получить false, иначе true.
Re: Как проверить строку?
Добавлено: 14 дек 2015, 09:43
Romeo
А зачем столько тем плодить? Я удалил тему про символ, так как вопрос о символе включён сюда.
Насколько я понимаю, символ на отображаемость проверить нельзя никак, иначе, чем перечислив все коды неотображаемых символов. При этом, нет никакой гарантии, что когда-нибудь в будущем, в зарезервированной части уникод таблицы не появится какой-нибудь хитрый пробел или символ сдвига для какого-нибудь нового хитрого алфавита.
Предлагаю написать простейшую лобовую проверку и чекать только символы '\n', '\r', '\t', ' '. И в будущем, если понадобиться, расширить этот список.
Ещё раз подчёркиваю, что официального честного и максимального правильного решения (например специальной WIN API функции или чего-то подобного) не существует.
Re: Как проверить строку?
Добавлено: 14 дек 2015, 12:48
Сионист
Romeo писал(а):Предлагаю написать простейшую лобовую проверку и чекать только символы '\n', '\r', '\t'. И в будущем, если понадобиться, расширить этот список.
Эйси. Это полный текущий список? Какого нибудь длинного, или неразрывного пробела в UTF32 нет?
Re: Как проверить строку?
Добавлено: 14 дек 2015, 13:43
Romeo
Вроде не существует. Но я не уверен. Нужно гуглить.
Добавлено: 14 дек 2015, 13:47
Сионист
Сразу нашёл вот это:
. Не поможете разобраться?
В
викепедии перечислены 16 разных пробелов. Не знаете, что там за коды приведены? UTF16? Или ещё какие?
Re: Как проверить строку?
Добавлено: 14 дек 2015, 15:39
WinMain
Проверять посимвольно строку UTF-8 вообще не имеет смысла. Сначала её нужно сконвертировать в UTF-16 и потом уже сканировать.
Re: Как проверить строку?
Добавлено: 14 дек 2015, 15:45
Romeo
Да, WinMain прав - нужно перекодировать в UTF16.
И, судя по вики, пробельных символов действительно может быть много, так что придётся проверять с десяток значений. Хотя, если честно, я очень сомневаюсь, что твоя программа будет работать с такими экзотическими алфавитами.
Re: Как проверить строку?
Добавлено: 14 дек 2015, 15:51
Absurd
Сначала её нужно сконвертировать в UTF-16 и потом уже сканировать.
UTF-16 тоже имеет чары переменной длины к сожалению. Лучше не заниматься велосипедостроением, а пользоваться библиотекой ICU от людей которые занимаются стандартизацией уникода. Там есть функция u_isspace.
Re: Как проверить строку?
Добавлено: 14 дек 2015, 17:16
Сионист
WinMain писал(а):Проверять посимвольно строку UTF-8 вообще не имеет смысла. Сначала её нужно сконвертировать в UTF-16 и потом уже сканировать.
Вообще то она у меня в UTF32, этот код гарантированно равномерный. В отличие от. Зато и выбран.
Там есть функция u_isspace.
Что это за функция? И где про неё можно прочитать?
Re: Как проверить строку?
Добавлено: 14 дек 2015, 17:58
Romeo
Библиотека есть такая
ICU.