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

Вниз

Переменная типа множества   Найти похожие ветки 

 
KA_   (2004-05-22 15:58) [0]

Есть тип
TChars = set of Char
и переменная такого типа. Можно ли использовать ее в качестве счетчика в цыкле for? Хотелось бы что-то вроде
var
 C: Char;
 CS: TChars;
begin
 CS := [];
 Include(CS, "a");
 Include(CS, "z");
 for C := Low(CS) to High(CS) do
 begin
   ...
 end;
end;


 
default ©   (2004-05-22 16:22) [1]

смысл-то какой?


 
KA_   (2004-05-22 16:26) [2]

Смысл такой. Есть две такие переменные, одна - подмножество другой. Строка проверяется на наличие в ней символов сначала из подмножества, затем из разницы между множествоим и подмножеством.


 
default ©   (2004-05-22 16:36) [3]

for C := Low(CS) to High(CS) do
begin
  ...
end;
видимо хотелось такое получить
for C := #0 to #255 do
begin
  ...
end;
или как?!или имелся ввиду цикл от "a" до "z"?


 
jack128 ©   (2004-05-22 16:47) [4]


> for C := Low(CS) to High(CS) do
> begin
>   ...
> end;
к множеству непременимы функции Low, High..

> Смысл такой. Есть две такие переменные, одна - подмножество
> другой. Строка проверяется на наличие в ней символов сначала
> из подмножества,

for i := 1 to Length(s) do
   if s[i] in SubSet then   // SubSet - твое подмножество
   begin
   end;


затем из разницы между множествоим и подмножеством.

TempSet :=  BaseSet - SubSet;

 for i := 1 to Length(s) do
   if s[i] in TempSet then  
   begin
   end;


 
KA_   (2004-05-22 16:48) [5]

Почти угадал.


type
 TNoNameChars = set of Char;
...
const
 NoNameChars: TNoNameChars = ["!", "~", """, "@", "#", "$", ";", "%", "^", ":", "&", "?",
   "*", "(", ")", "_", "=", "+", "|", "<", ">"];
 SmallNoNameChars: TNoNameChars = ["!", "~", "@", "#", "$", ";", "%", "^", ":", "?",
   "*", "_", "=", "+", "|", "<", ">"];
...
function BadName(const Str: String; Strict: Boolean = True): Boolean;
var
 I: Integer;
 AddChars: TNoNameChars;
 C: Char;
begin
 Result := True;
 for I := 1 to Length(Str) do
   if Strict then
     if Str[I] in NoNameChars then Exit
   else
     if Str[I] in SmallNoNameChars then Exit;
 AddChars := NoNameChars - SmallNoNameChars;
 for C := Low(TNoNameChars) to High(TNoNameChars) do
   if C in AddChars then
   if Pos(C + C, Str) then
     Exit;
 Result := False;
end;


 
KA_   (2004-05-22 16:49) [6]

Как видно из кода мне надо искать подстроки из двух недопустимых символов.


 
KA_   (2004-05-22 16:50) [7]

Код нерабочий :) Но хотелось бы такой.


 
jack128 ©   (2004-05-22 16:56) [8]

SmallNoNameChars - подмножество NoNameChars? Тогда какой смысл в
> if Str[I] in NoNameChars then Exit// если не выполняется это условие, то
>    else
>      if Str[I] in SmallNoNameChars then Exit; очевидно не выполняется и это..


> AddChars := NoNameChars - SmallNoNameChars;
>  for C := Low(Char) to High(Char) do
>    if C in AddChars then
>    if Pos(C + C, Str) then
>      Exit;


 
default ©   (2004-05-22 17:47) [9]

jack128 ©   (22.05.04 16:56) [8]
"SmallNoNameChars - подмножество NoNameChars? Тогда какой смысл в
> if Str[I] in NoNameChars then Exit// если не выполняется это условие, то
>    else
>      if Str[I] in SmallNoNameChars then Exit; очевидно не выполняется и это.."
там же ещё "магический" Strict есть!
код очень туманный...


 
default ©   (2004-05-22 17:58) [10]

хотя да ты прав
наверно, он хотел чтоб работало так как здесь
for I := 1 to Length(Str) do
  if Strict then begin
    if Str[I] in NoNameChars then Exit
  end
  else
    if Str[I] in SmallNoNameChars then Exit;


 
jack128 ©   (2004-05-22 17:58) [11]


> там же ещё "магический" Strict есть!
этот else к Strict отнашения не имеет, он относится именно к if Str[I] in NoNameChars then  А то что автор так отступы сделал, так это его проблемы,на которые компилятору глыбоко наплевать ;-)


 
default ©   (2004-05-22 18:00) [12]

прикольно вышло(в одну минуту)


 
KA_   (2004-05-23 13:16) [13]

>jack128 ©  
>default ©

Спасибо, что нашли ошибку в коде :) Я ее пропустил :(

Но вопрос был о другом...


 
Юрий Зотов ©   (2004-05-23 13:43) [14]

> KA_   (23.05.04 13:16) [13]

> Но вопрос был о другом...

Ну дык... язык Паскаль - это язык Паскаль, и его правила не объедешь. Но кто мешает сделать, например, так:

for C := #32 to #255 do
 if (C in AddChars) and (Pos(C + C, Str) > 0) then Exit;


 
KA_   (2004-05-23 13:55) [15]

>Юрий Зотов ©

Спасибо. Я так уже сделал. Но подумал - вдруг есть возможность сделать это красивее :)



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

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

Наверх




Память: 0.5 MB
Время: 0.053 c
1-1085573870
Прямой
2004-05-26 16:17
2004.06.06
считать данные из DOS окна


14-1084855157
Vlad Oshin
2004-05-18 08:39
2004.06.06
Научите, как узнать для чего и какая dll нужна в папках windows


4-1083428532
Vin_Ghost
2004-05-01 20:22
2004.06.06
Создание полнокранного приложения


1-1085416549
Lena19
2004-05-24 20:35
2004.06.06
задержка выполнения без нагрузки на проц


1-1085575164
Анна
2004-05-26 16:39
2004.06.06
Где можно найти BOLD кроме как на Interface?