Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как работает CharInSet?


Cobalt ©   (2011-07-14 13:46:00) 

Д2010
Еcть код

procedure TForm1.btn1Click(Sender: TObject);
var
 TmpStr: string;
begin
 TmpStr := 'Асбест';
 Memo1.Lines.Clear;
 Memo1.Lines.Add(BoolToStr(TmpStr[1] in ['А'..'Я', 'Ё'], True));
 Memo1.Lines.Add(BoolToStr(TmpStr[2] in ['а'..'я', 'ё'], True));
 Memo1.Lines.Add(BoolToStr(CharInSet(TmpStr[1], ['А'..'Я', 'Ё']), True));
 Memo1.Lines.Add(BoolToStr(CharInSet(TmpStr[2], ['а'..'я', 'ё']), True));
end;

в результате получаю
False
False
False
False

В чем ошибка?


DVM   (2011-07-15 19:25:00) [1]


> Cobalt ©   (14.07.11 14:17) [2]


> Что мне надо сдедать, чтобы узнать, входит ли определенный
> символ строки во множество русских заглавных или строчных
> букв?

Создай строку из всех интересующих тебя символов вместо множества и выполняй Pos над ней и искомым символом. Или варианты выше.


Dimka Maslov   (2011-07-15 09:03:00) [2]

у WideChar размер символа 2 байта, тогда по определению множества его элементами могут быть однобайтовые значения.


Cobalt   (2011-07-15 07:45:00) [3]

А чё му widechar не нравится?


Игорь Шевченко   (2011-07-14 15:11:00) [4]


> Что мне надо сдедать, чтобы узнать, входит ли определенный
> символ строки во множество русских заглавных или строчных
> букв?


1. Сравнивать Ansi-строки
2. использовать GetStringTypeEx
3. Использовать явное сравнение, например
((Ord(C) >= Ord(WideChar('А'))) and (Ord(C) <= Ord(WideChar('Я')))) or (Ord(C) = Ord(WideChar('Ё')))


Dimka Maslov   (2011-07-14 14:55:00) [5]

((Ch >= 'A') and (Ch <= 'Я')) or ((Ch >= 'a') and (Ch <= 'я')) or (Ch = 'Ё') or (Ch = 'ё')


Palladin   (2011-07-14 14:25:00) [6]

procedure TForm1.btn1Click(Sender: TObject);
var
 TmpStr: Ansistring;
begin
 TmpStr := 'Асбест';
 Memo1.Lines.Clear;
 Memo1.Lines.Add(BoolToStr(TmpStr[1] in ['А'..'Я', 'Ё'], True));
 Memo1.Lines.Add(BoolToStr(TmpStr[2] in ['а'..'я', 'ё'], True));
 Memo1.Lines.Add(BoolToStr(CharInSet(TmpStr[1], ['А'..'Я', 'Ё']), True));
 Memo1.Lines.Add(BoolToStr(CharInSet(TmpStr[2], ['а'..'я', 'ё']), True));
end;


Cobalt   (2011-07-14 14:17:00) [7]

Вопрос поставлен неправильно. Переформулирую:

Что мне надо сдедать, чтобы узнать, входит ли определенный символ строки во множество русских заглавных или строчных букв?


Игорь Шевченко   (2011-07-14 13:56:00) [8]


> Как работает CharInSet?


вот так:

function CharInSet(C: AnsiChar; const CharSet: TSysCharSet): Boolean;
begin
 Result := C in CharSet;
end;

function CharInSet(C: WideChar; const CharSet: TSysCharSet): Boolean;
begin
 Result := (C < #$0100) and (AnsiChar(C) in CharSet);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо