Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1084863291
kull
2004-05-18 10:54
2004.06.06
Сравнительная характеристика систем контроля версий...


4-1082703033
Александр_33
2004-04-23 10:50
2004.06.06
Текст в окне DOS-приложения


14-1083617499
Piter
2004-05-04 00:51
2004.06.06
Фото, видео и аудио материалы со встреч, проводимых этим сайтом


1-1085231594
volkodav
2004-05-22 17:13
2004.06.06
Экранные координаты точки


14-1084973432
slaga
2004-05-19 17:30
2004.06.06
как узнать какие значения принемает кнопка на клавиатуре ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский