Главная страница
    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.047 c
4-1083651174
Ske4er
2004-05-04 10:12
2004.06.06
Классический вопрос


14-1084975650
Mim1
2004-05-19 18:07
2004.06.06
Про неправильные ответы


1-1085628648
Настенька
2004-05-27 07:30
2004.06.06
Stringgrid


8-1080647563
i2e
2004-03-30 15:52
2004.06.06
Как одну из картинок ImageList загружать в Image?


14-1085135293
default
2004-05-21 14:28
2004.06.06
MathCad





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский