Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как найти символ в строке [D7]


Zhuck01 ©   (2011-12-06 21:03:00) 

Есть строка и и список символов, которые не должны встречаться в данной строке. Вроде всё просто. Задаём список, сравниваем. Но вот если список не охото составлять вручную, а  возложить это действие на Delphi. То есть, возможно ли задать массив например так ['0'..'9','А'..'Я']. Чтоб это всё работало в следующем примере

....
function srvmas(s:string;mas:Array of char):boolean;
var
i,j,k,l:integer;
begin
result:=false;
k:=length(s);
l:=length(mas);
for i:=1 to k do
 for j:=0 to l do
  if s[i]=mas[j] then
  begin
   result:=true;
   break;
  end;
end;
....
if (not srvmas(table1.FieldByName('HOUSE').AsString,vararrayof( ['0'..'9','А'..'Я']))) then
begin
 .....
end;
....



и ещё один вопрос, почему если делать так
....
function srvmas(s:string;mas:Array of char):boolean;
var
i,j:integer;
begin
result:=false;
j:=length(s);
for i:=1 to j do
  if s[i] in mas then
  begin
   result:=true;
   break;
  end;
end;
....

выходит ошибка, ведь я проверяю есть ли символ в массиве символов

Заранее спасибо


OW   (2011-12-07 11:44:00) [1]


> l:=length(mas);

~ length(mas) - 1
никогда не забываем.
Длина = N, последний индекс N-1.


OW   (2011-12-07 11:40:00) [2]

public     { Public declarations }
   function srvmas(s: string; mas: Array of char):boolean;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.srvmas(s: string; mas: array of char): boolean;
var
 i,j,k,l:integer;
begin
 result := false;
 k := length(s);
 l := length(mas) - 1;
 for i := 1 to k do
   for j := 0 to l do
     if s[i] = mas[j] then
     begin
       result := true;
       Exit;
     end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  if srvmas('HOUSE', ['D','a']) then
    ShowMessage( 'D a');
  if srvmas('HOUSE', ['D','O']) then
    ShowMessage( 'D O');
end;


vegarulez   (2011-12-07 10:00:00) [3]

Используй регулярные выражения. И будет тебе счастье.


Zhuck01   (2011-12-06 21:54:00) [4]


> Германн ,> Dimka Maslov


Благодарю, извеняюсь, тупанул


Rouse_   (2011-12-06 21:51:00) [5]

uses Masks; -> MatchesMask()
если маской не получается отсечь - используй регулярки


Dimka Maslov   (2011-12-06 21:51:00) [6]


> и где несовпадение типов


Оператор in осуществляет проверку нахождения символа в множестве, а не в массиве.


Германн   (2011-12-06 21:47:00) [7]


> возможно ли задать массив например так ['0'..'9','А'..'Я']

Это не массив, а множество.


Zhuck01   (2011-12-06 21:40:00) [8]


> Dimka Maslov

так что же тут не то и где несовпадение типов? или стрка это не массив символов?


Dennis I. Komarov   (2011-12-06 21:37:00) [9]


> Dimka Maslov ©   (06.12.11 21:29) [1]

Не царское это дело... Пущай другие...


Dimka Maslov   (2011-12-06 21:29:00) [10]

Изучать программирование надо не с table1.FieldByName('HOUSE').AsString, а с понятий "переменная", "тип", "символ", "строка", "множество" и т.д.


Наверх

Титульная страница Поиск, карта сайта Написать письмо