Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2015, 14:09   #1
Caeles-Lupus
 
Регистрация: 31.08.2010
Сообщений: 4
Вопрос Как сравнить символ из строки с множеством

Здравствуйте, нужна помощь с преобразованием строковых/символьных типов. Суть в том, что мне надо найти какие символы из строки(string) входят в множество символов. И так примеры:

PHP код:
...
var
  
s:string;
begin
  s
:='Ы';

  if (
s[1in ['А'..'Я','а'..'я']) then
    begin
    showmessage
('+');
    
end
  
else
    
begin
    showmessage
('-');
    
end;
...
end
Результат: message:'-'
Но если сделать так:

PHP код:
...
var
  
s:string;
begin
  s
:='Ы';

  if 
'Ы' in ['А'..'Я','а'..'я']) then
    begin
    showmessage
('+');
    
end
  
else
    
begin
    showmessage
('-');
    
end;
...
end
То в результате будет: message:'+', что логично, т.к. 'Ы' явно входит в множество от А до Я
Я так понимаю что проблема в получении символа из строки s[i]. Только в чем именно проблема, в кодировке?

P.S.: СР - RAD Studio 10 Seattle

----------------

Все, кажется понял. Надо просто строке(s) задать тип AnsiString и всё. Спасибо за помощь!

Последний раз редактировалось Caeles-Lupus; 09.11.2015 в 14:37. Причина: нашел ответ
Caeles-Lupus вне форума Ответить с цитированием
Старый 09.11.2015, 14:21   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

В кодировке. Юникодные символы национальных алфавитов никак не могут входить в паскалевское множество.
northener вне форума Ответить с цитированием
Старый 09.11.2015, 14:36   #3
Caeles-Lupus
 
Регистрация: 31.08.2010
Сообщений: 4
По умолчанию

Тему можно закрывать, все работает
Caeles-Lupus вне форума Ответить с цитированием
Старый 09.11.2015, 14:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if (s[1] in ['А'..'Я','а'..'я']) then
Я у себя это заменяю на
Код:
 if pos(s[1],'АЯая')<>0 then...
Надежнее работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2015, 14:45   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Виталий, а разве pos раскроет диапазон?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.11.2015, 15:02   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ой, провтыкал )))
Согласен, тут эта функция не оч. подойдет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2015, 15:13   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

А в Д2009+ вообще нет никаких красивых вариантов. Чем не пользуйся, хоть InOpArray, хоть Contains все равно приходится делать простое перечисление символов.
northener вне форума Ответить с цитированием
Старый 09.11.2015, 15:15   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А в Д2009+ вообще нет никаких красивых вариантов.
А регулярки?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2015, 15:30   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А регулярки?
Я их боюсь
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать символ #7 в конце строки? harmager Общие вопросы Delphi 1 12.04.2015 13:27
Как удалить символ переноса строки? bilibian Общие вопросы Delphi 6 22.01.2015 02:02
немогу сравнить символ строки с пробелом SUDALV Общие вопросы C/C++ 4 07.04.2011 21:46
Как найти в тесте символ новой строки? Anfall Общие вопросы Delphi 2 17.10.2010 15:10
как присвоить char'у символ перевода строки? Retiz Помощь студентам 6 06.04.2008 00:05