Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.06;
Скачать: CL | DM;

Вниз

Как работает CharInSet?   Найти похожие ветки 

 
Cobalt ©   (2011-07-14 13:46) [0]

Д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

В чем ошибка?


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


> Как работает 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;


 
Cobalt ©   (2011-07-14 14:17) [2]

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

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


 
Palladin ©   (2011-07-14 14:25) [3]

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;


 
Dimka Maslov ©   (2011-07-14 14:55) [4]

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


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


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


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


 
Cobalt ©   (2011-07-15 07:45) [6]

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


 
Dimka Maslov ©   (2011-07-15 09:03) [7]

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


 
DVM ©   (2011-07-15 19:25) [8]


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2011.11.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1310329795
Юрий
2011-07-11 00:29
2011.11.06
С днем рождения ! 11 июля 2011 понедельник


2-1311147933
oleg_veles
2011-07-20 11:45
2011.11.06
Работа со строками в Мемо


2-1310636801
Cobalt
2011-07-14 13:46
2011.11.06
Как работает CharInSet?


2-1311139968
Anthony
2011-07-20 09:32
2011.11.06
Убрать мерцание в RichEdit


2-1310662885
Anthony
2011-07-14 21:01
2011.11.06
Простой RTF редактор для Delphi