Главная страница
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.008 c
15-1310017395
И. Павел
2011-07-07 09:43
2011.11.06
Запрет на повторный запуск программы под одним пользователем


2-1310950620
R_R
2011-07-18 04:57
2011.11.06
TImage не растягивается вслед за формой...


15-1310132490
oleg1963lora
2011-07-08 17:41
2011.11.06
Переход с Win на Lin через Kubuntu


1-1272268693
Дмитрий Белькевич
2010-04-26 11:58
2011.11.06
PolyBezier, проходящий через заданные точки.


3-1265443339
lock95
2010-02-06 11:02
2011.11.06
SQL запрос ADODataSet.CommandText