![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день, имеется на форме 2 полей едит, в каждую из них вводятся разные по длине цифры, разделенные запятыми, вопрос как сравнить эти поля едит на наличие одинаковых цифр, пример (12345,157,159). Заранее спасибо
|
|
#2
|
|||
|
|||
|
Прочитать любую книжку по программированию
|
|
#3
|
||||
|
||||
|
Э... Просьба разграничить понятия "цифра" и "число". Потому что
Цитата:
Цитата:
Если имеется в виду, что вводятся ЧИСЛА и надо найти одинаковые ЦИФРЫ - то просто проходим по двум строкам и сравниваем каждый символ первой строки с каждым второй (кроме запятых разумеется). Если вводятся ЧИСЛА и надо найти одинаковые ЧИСЛА, то примерно так: ищем через POS первую запятую, вычленяем число до нее, удаляем из строки вместе с запятой, пишем число в массив. И так составляем два массива. А дальше проходим по ним и сравниваем элементы. Алгоритм весь я привел. Если хотите, чтоб написали за вас всю программу -> в раздел "работа". Upd: Решение от Pyro тоже очень хорошее. ![]() |
|
#4
|
|||
|
|||
|
простой и не самый эфф. метод (если правильно понял задачу):
Код:
var
S : TStringList;
I, J : Integer;
begin
S := TStringList.Create;
Try
S.Text := StringReplace(Edit1.Text,',',#13#10,[rfReplaceAll]);
For I := 0 To S.count-2 Do
For J := I + 1 To S.count-1 Do
If S[i] = S[J] Then
Begin
ShowMessage('Цифра встечается более одного раза: '+ S[i]);
Exit;
End;
ShowMessage('Повторяющихся цифр нет.');
Finally
S.Free;
End;
end; |
|
#5
|
|||
|
|||
|
сори за офтоп но на руби это выглядит так:
a, b = '123,456,789,654,987', '456,654' print a.split(',') - b.split(',') print a.split(',') & b.split(',') Последний раз редактировалось Pyro, 10.09.2011 в 08:00. |
|
#6
|
|||
|
|||
|
вот решение
здесь в ListBox1-расщепленная на подстроки строка из Edit1 в ListBox2-формируется список совпадающих строк с строкой Edit2 Числа из строк сделаешь сам (StrToInt()) а вообще-то можно воспользоваться советом PYRO Код:
function PrepareStr(s:string;term:char):string;
var
i:integer;
begin
Result:='';
for i:=1 to Length(s) do
if s[i]=term then
Result:=Result+#13#10
else
Result:=Result+s[i];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
ListBox2.Clear;
ListBox1.Items.Text:=PrepareStr(Edit1.Text,',');
for i:=0 to ListBox1.Items.Count-1 do
if pos(ListBox1.Items[i],Edit2.Text) > 0 then
ListBox2.Items.Add(ListBox1.Items[i])
end; |
|
#7
|
|||
|
|||
|
а еще можно и так:
Код:
uses StrUtils;
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
OffsBeg,OffsEnd,i:integer;
begin
OffsBeg:=1;
repeat
OffsEnd:=PosEx(',', Edit1.Text, OffsBeg);
if OffsEnd=0 then OffsEnd:=Length(Edit1.Text)+1;
ListBox1.Items.Add(Copy(Edit1.Text,OffsBeg, OffsEnd-OffsBeg)); //отладка
if pos(Copy(Edit1.Text,OffsBeg+1, OffsEnd-OffsBeg), Edit2.Text) > 0 then
ListBox2.Items.Add(Copy(Edit1.Text,OffsBeg, OffsEnd-OffsBeg));
OffsBeg:=OffsEnd+1;
until OffsEnd >= Length(Edit1.Text);
end;Последний раз редактировалось chainik, 11.09.2011 в 20:15. |
|
#8
|
|||
|
|||
|
Спасибо большое
![]() |