![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работает 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;