|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сравнение чисел разделенных запятой
Добрый день, имеется на форме 2 полей едит, в каждую из них вводятся разные по длине цифры, разделенные запятыми, вопрос как сравнить эти поля едит на наличие одинаковых цифр, пример (12345,157,159). Заранее спасибо
|
#2
|
|||
|
|||
Прочитать любую книжку по программированию
|
#3
|
||||
|
||||
Э... Просьба разграничить понятия "цифра" и "число". Потому что
Цитата:
Цитата:
Если имеется в виду, что вводятся ЧИСЛА и надо найти одинаковые ЦИФРЫ - то просто проходим по двум строкам и сравниваем каждый символ первой строки с каждым второй (кроме запятых разумеется). Если вводятся ЧИСЛА и надо найти одинаковые ЧИСЛА, то примерно так: ищем через POS первую запятую, вычленяем число до нее, удаляем из строки вместе с запятой, пишем число в массив. И так составляем два массива. А дальше проходим по ним и сравниваем элементы. Алгоритм весь я привел. Если хотите, чтоб написали за вас всю программу -> в раздел "работа". Upd: Решение от Pyro тоже очень хорошее. jmp $ ; Happy End! The Cake Is A Lie. |
#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
|
|||
|
|||
Спасибо большое
|